【C语言取反运算符】~2是多少?~-5是多少?

标题的答案:
~2=-3
~-3=2
原理是什么?我们先来看这个程序及输出的结果:
在这里插入图片描述
容易总结出这样一个结论:~i=-i-1
为什么呢?
一言以蔽之,~运算符是对i的补码(含符号位)进行取反。
2的原码是0000 0010 正数补码是其本身0000 0010
取反(含符号位)后补码变成1111 1101 此时补码为负数,换成原码要符号位不变,减去1,再取反,即原码成了1000 0011 即为-3

-5的原码是1000 0101 负数的补码是原码符号位不变、取反并+1,因此补码是1111 1011 ,对补码取反(含符号位) 此时补码为0000 0100 补码此时符号位是正,因此原码也是0000 0100 即为4

因此,~i=-i-1。

如果想要更充分的理解这个结论,来考虑一下,对任意一个二进制数取反的含义是什么?1010取反是0101
0100取反是1011,容易看出取反的本质就是找一个数和原来的相加得到每一位均为1的数,因此要找的数就是2^M-1-a,M是位数(例如1010有四位,15-10=5,5就是0101)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农民真快落

我琢磨着也没人给我打赏呀。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值