用位运算实现加法也就是计算机用二进制进行运算,32位的CPU只能表示32位内的数,这里先用1位数的加法来进行,在不考虑进位的基础上,如下
- 1 + 1 = 0
- 1 + 0 = 1
- 0 + 1 = 1
- 0 + 0 = 0
很明显这几个表达式可以用位运算的“^”来代替,如下
- 1 ^ 1 = 0
- 1 ^ 0 = 1
- 0 ^ 1 = 1
- 0 ^ 0 = 0
这样我们就完成了简单的一位数加法,那么要进行二位的加法,这个方法可行不可行呢?肯定是不行的,矛盾就在于,如何去
获取进位?要获取进位我们可以如下思考:
- 0 + 0 = 0
- 1 + 0 = 0
- 0 + 1 = 0
- 1 + 1 = 1
- //换个角度看就是这样
- 0 & 0 = 不进位
- 1 & 0 = 不进位
- 0 & 1 = 不进位
- 1 & 1 = 进位
正好,在位运算中,我们用“<<”表示向左移动一位,也就是“进位”。那么我们就可以得到如下的表达式
- //进位可以用如下表示:
- (x&y)<<1
到这里,我们基本上拥有了这样两个表达式
- x^y //执行加法
- (x&y)<<1 //进位操作
我们来做个2位数的加法,在不考虑进位的情况下
- 11+01 = 100 // 本来的算法
- // 用推算的表达式计算
- 11 ^ 01 = 10
- (11 & 01) << 1 = 10
- //到这里 我们用普通的加法去运算这两个数的时候就可以得到 10 + 10 = 100
- //但是我们不需要加法,所以要想别的方法,如果让两个数再按刚才的算法计算一次呢
- 10 ^ 10 = 00
- (10 & 10) << 1 = 100
到这里基本上就得出结论了,其实后面的那个 “00” 已经不用再去计算了,因为第一个表达式就已经算出了结果。
继续推理可以得出三位数的加法只需重复的计算三次得到第一个表达式的值就是计算出来的结果。
c代码如下:
int Add(int a,int b)
{
int jw=a&b;
int jg=a^b;
while(jw)
{
int t_a=jg;
int t_b=jw<<1;
jw=t_a&t_b;
jg=t_a^t_b;
}
return jg;
}
计算机本质是二进制运算,许多高人和天书都展示了如何用位运算来实现让人纠结却又惊奇的事情。在豆瓣上看到一篇日志描述如何用位运算实现乘法,其实问题解决的关键是如何用位运算实现加法。觉得原文叙述不够精确,现总结如下。
定理1:设a,b为两个二进制数,则a+b = a^b + (a&b)<<1。
证明:a^b是不考虑进位时加法结果。当二进制位同时为1时,才有进位,因此 (a&b)<<1是进位产生的值,称为进位补偿。将两者相加便是完整加法结果。
定理2:使用定理1可以实现只用位运算进行加法运算。
证明:利用定理1中的等式不停对自身进行迭代。每迭代一次,进位补偿右边就多一位0,因此最多需要加数二进制位长度次迭代,进位补偿就变为0,这时运算结束。
相关推荐
实现加法运算实现加法运算实现加法运算实现加法运算
易语言位运算实现加法运算源码,位运算实现加法运算,ToSymbolInteger,Add
易语言位运算实现加法运算源码。@资源源码站。
易语言源码易语言位运算实现加法运算源码.rar
用位运算实现加法也就是计算机用二进制进行运算,32位的CPU只能表示32位内的数,这里先用1位数的加法来进行,需要的朋友可以参考下
实现进行加法运算,输入的数字存到数组里面,然后进行加法运算
利用java完成图形化用户界面实现加法运算,第一个加第二个当点击等号时在第三个文本框中显示相加之和
使用MFC编写的一个小程序,实现了加法的功能,和模态对话框的显示功能
易语言位运算实现加法运算源码
心理学常用软件E-prime,在设计两位数加法运算中的简单举例。
(1)按照实验要求设计简单ALU,能执行8种操作,分别为: 1)加、减、增1、减1等4种8位...也可以先构造4位加法器,再进一步实现8位加减运算。 注意:算术运算的两个操作数要求都是带符号数,即1位符号位和7位数据位。
基于pytorch的实现的LSTM,有完整的定义和使用,数据集和验证集自动生成,训练500次后随机生成20组验证数据,正确率100%,代码加上注释共160行,是个简单实用的LTSM神经网络入门学习例子
文章目录只用位运算不用算术运算实现整数的加减乘除运算位运算实现整型算术运算加法相应代码减法相应代码乘法相应代码除法相应代码 只用位运算不用算术运算实现整数的加减乘除运算 位运算实现整型算术运算 【题目】 ...
使用FPGA内部硬件资源实现浮点数加法运算,占用资源少,运算速度快
设计任意两个复数实现4则运算(复数加法、减法、乘法、除法)的Web程序。要求采用如下的设计模式: (1)JavaBea+JSP (2)JavaBean+Servlet+JSP
用十字链表实现稀疏矩阵加法运算、稀疏矩阵减法运算、稀疏矩阵乘法运算
采用十字链表表示稀疏矩阵,并实现矩阵的加法运算
这个zip包包含三个项目文件,分别是数据运算定点加法器、4bit超前进位加法器、使用4bit CLA 组合设计的一个 16bit 加法器。
c++利用稀疏矩阵运算器三元组求解,算法比较简单,