我看了很多博主对于按位取反的讲法是有些错误的,或者也有可能是我理解错了哈哈,但是我的方法用在任何数字上结果都是正确的,大伙不妨先听听看
首先要知道两点(弄懂这两点其实就简单了):
1.按位取反只能对补码来取反,意思是把一个原值先化成补码了再取反,并且最高位(符号位)也要取反,即正数按位取反后变为负数,负数按位取反后变为正数(由于0的补码始终都为0,所以0按位取反后为-1)
2.取反后的值也以补码的形式存在,那么正数的补码即是它本身,负数补码化为原码是需要计算一下的
一、a=15
那么a的原码是0000 1111,正数的补码就是原码本身,所以a的补码也是0000 1111
取反后为为1111 0000,此时的数为~a的补码,且~a为负数
已知一个负数补码,那么原码为补码符号位不变,数值位按位取反后加1
符号位不变数值位按位取反为:10001111;加1后为:10010000
即~a=-16
二、a=-15
那么a的原码为1000 1111,a的反码为原码符号位不变,数值位取反即1111 0000,
补码为反码+1即1111 0001;对补码按位取反后为0000 1110(符号位也要取反),此时按位取反
依然是补码,但是正数的补码等于原码
即~a=14