C++位运算是补码形式

C++中的位运算是在补码表示的基础上进行的。举例说明93&-8在原码和补码下的不同结果,补码情况下得出正确答案88。位运算对于正数结果一致,因补码与原码相同。计算机内部使用补码存储,位运算使用补码也符合逻辑。代码验证了这一结论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值