按位取反‘~’是啥?

首先,按位取反是二进制的一种计算方式,它的运算顺序是:原码——反码——补码——补码取反——补码取反后的码取反码——再取补码。。。。。

喵的,我自己看的都云里雾里,所以就举一个例子:

b=~7

prin(b)

 猜猜等于多少?     哦豁~~~答案竟然是———(自己先想一想去)

 

首先,7的二进制形式是00000111,对它取反码,得00000111,取补码,得00000111。

什么?不知道什么是反码,补码,取反?好吧,普及一下,取反:即把1变成0,0变成1.

反码:正数的反码是其本身,负数的反码是符号位(第一位)不变,其它位0变1,1变0.

补码:反码的最后一位加1(若本身就是1,则向前进1位),内存中二进制是以补码形式储存的。

现在00000111取反,得11111000,对其取反码,得100000111,再取补码,得10001000,也就是-8。(对了,忘了说了,符号位是0为正,是1为负)

这样,~7,也就是7的按位取反就出来了,等于-8

现在再推一个负数:

c=~-7

print(c)

 -7的二进制为10000111,反码:11111000,补码:11111001,补码取反:00000110,再取反码:00000110,取补码:00000110,最终结果为6。

好了,现在应该会了吧?顺便一提,0的按位取反是-1。

什么?你说每次这样算太麻烦了?好吧,告诉你个小窍门:

正数的按位取反为本身加一再取负(如~6=-7);

负数的按位取反为本身加一再取绝对值(如~-6=5)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值