编译器? 求解两数运算?
来源:互联网 发布:apache tomcat怎么安装 编辑:程序博客网 时间:2024/06/15 18:19
这个问题也不算新鲜了,换一种方式提问就是"如何不用 + - * / 运算符,来求解两元素之和"的问题;大家很自然的回想起利用位运算。在数字电路中,我们都遇到过设计“加法器”的问题,利用位与、或、非、异或可以很轻松的解决此问题;这里,不用此方式,而是借助编译器的地址偏移,来解决问题。
基本思路如下:
(1)将其中int型数据转为地址(或者说是一个数组的首地址)
(2)然后利用数组下角标索引,进行地址偏移,获取偏移后的address
基本思路如下:
(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
- 编译器? 求解两数运算?
- 两数乘积运算
- 水仙花数(armstrong)求解,两种方法
- 位运算求解两个数的平均值
- 位运算求解两个数的平均值
- 运算符和两数的交换
- js 两数 的 加减乘数 运算
- 位运算之两数交换
- java赋值运算 两数交换
- 用位运算快速求解全部组合数
- 不用加减乘除运算符求解两个数加减乘除
- 不用加减乘除运算符计算两数之和
- 使用异或运算实现两数交换
- 使用异或运算实现两数交换
- 不使用算数运算符 完成两数求和
- js浮点数运算保留两位小数点
- 使用按位异或运算符进行两数交换
- careercup5.5求解转换两数所需修改的位数
- C++的三大特性封装 继承 多态的理解
- 有时间我就要写点书评
- 【NOI2015】【BZOJ4199】品酒大会
- excel笔记
- 二叉树的子树和子结构的几个问题
- 编译器? 求解两数运算?
- PHP的SAPI
- 【图像处理笔记】灰度变换
- 快速排序算法
- log4J 用法详细
- 如何用参数化SQL语句污染你的计划缓存
- n!的长度(stirling公式的应用)
- 64 互斥锁 线程通信 线程同步
- Semi-prime H-numbers(POJ--3292