编译器? 求解两数运算?

来源:互联网 发布:apache tomcat怎么安装 编辑:程序博客网 时间:2024/06/15 18:19
      这个问题也不算新鲜了,换一种方式提问就是"如何不用 + - * / 运算符,来求解两元素之和"的问题;大家很自然的回想起利用位运算。在数字电路中,我们都遇到过设计“加法器”的问题,利用位与、或、非、异或可以很轻松的解决此问题;这里,不用此方式,而是借助编译器的地址偏移,来解决问题。
基本思路如下:
(1)将其中int型数据转为地址(或者说是一个数组的首地址)
(2)然后利用数组下角标索引,进行地址偏移,获取偏移后的address

(3)将(2)中得到的地址转换为int类型

下面贴出code,几行的事儿,但可以深深的吸引着我们的脑洞:

// ptrtest.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include<iostream>using namespace std;int add(int a,int b){char * c;c = reinterpret_cast<char*>(a);char * d=&c[b];int sum=reinterpret_cast<int>(d);return sum;}int _tmain(int argc, _TCHAR* argv[]){cout <<"sum =" <<add(4,5) << endl;return 0;}

让我们欣赏一下watch窗口,顿时脑洞打开吧!


愉快的享受一下,编译器给我们带来的盛宴吧!




1 0