码迷,mamicode.com
首页 > 其他好文 > 详细

编译器? 求解两数运算?

时间:2015-08-26 12:10:17      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:编译器   运算符   + -   

      这个问题也不算新鲜了,换一种方式提问就是"如何不用 + - * / 运算符,来求解两元素之和"的问题;大家很自然的回想起利用位运算。在数字电路中,我们都遇到过设计“加法器”的问题,利用位与、或、非、异或可以很轻松的解决此问题;这里,不用此方式,而是借助编译器的地址偏移,来解决问题。
基本思路如下:
(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窗口,顿时脑洞打开吧!

技术分享

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




编译器? 求解两数运算?

标签:编译器   运算符   + -   

原文地址:http://blog.csdn.net/gggg_ggg/article/details/47999851

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!