在这种情况下,'addition'和'bitwise or'是一样的吗?

Are 'addition' and 'bitwise or' the same in this case?

本文关键字:一样 or 这种情况下 addition bitwise      更新时间:2023-10-16

假设我有四个32位数字,定义为它们的位不重叠,即

unsigned long int num0 = 0xFF000000;
unsigned long int num1 = 0x00FF0000;
unsigned long int num2 = 0x0000FF00;
unsigned long int num3 = 0x000000FF;

在每个数字中可以有任何东西来代替FF s

我说按位相加或对这类数字总是产生相同的输出,对吗?

谢谢!

只要两个数num1和num2应用num1 & num2 == 0,则如下:

num1 + num2 == num1 | num2

这样做的原因是,加法基本上是一个按位异或,加上进位。但是只要没有进位(num1 & num2 == 0),那么加法归结为位异或,在这种情况下(再次因为num1 & num2 == 0)在逻辑上相当于位或

是的,因为(按位来看)0+10|1相同。唯一的区别是1|1 (=1)1+1(=0b10),即创建一个0和溢出,影响到左边的位)。

所以在你的例子中两者是等价的。但是你应该为安全起见,选择不容易出错的版本

No:

num3 + num3 => 0x000001FE
num3 | num3 => 0x000000FF

当然,只要您确保只在您知道它们没有相同位设置的情况下将它们加在一起,就应该是安全的。

只要你不做num3 + num3这样的事情,是的。

每当按位加法加一个以上的1(要么是因为源中有1,要么从另一个地方进位也是1),则产生进位,并且一个位置影响另一个位置。只要加法中最多加一个1,就和按位或一样。

当我们观察加法器电路(http://en.wikipedia.org/wiki/Adder_%28electronics%29)时也可以看到这一点,当不产生进位时,电路中参与的所有元素都是"或"元素。

加法和按位运算或将与按位运算相同,或将包括其中的任何位,并且考虑到您的位的互斥性质,普通加法将完全相同。

相关文章: