C++位运算是补码形式

C++位运算是用的补码

用例说明
在C++中运算93&-8得88;但是用原码来算的话,结果是8;

所以在C++中,位运算是作用在补码上的。

如果都是正数,应该结果一致,因为补码跟原码相同。

-8的原码: 10000000000000000000000000001000
-8的反码:11111111111111111111111111110111
-8的补码:11111111111111111111111111111000
93的原码:00000000000000000000000001011101

由于93是正数,所以原码反码补码都相等,不再写出。
int类型是4字节,所以有32位,后面为了简明,就用8bit表示
如果按照原码来计算的话;
93&-8就是:

01011101
10001000

两者相与,结果为00001000,也就是8。
如果按照补码来算就是:

01011101
11111000

结果就是01011000,用补码来翻译,是一个正数,那么原码形式也是如此,也就是88。

我们知道,计算机内部存储的是数据的补码,没想到位运算也是补码。细想又觉得合理。
下面放出验证代码和执行结果:

你可能感兴趣的:(C++特性,日常编程遇到的小问题,c++,补码)