我是看视频学的,简单的归纳了下,希望可以帮到你,可能有漏洞哦,可以边看教学视频边看我的小总结。
我举例的数据算的也是~4,也就是4的反码,过程中也有负数的原码反码补码变换。
按位与&有0则0
按位或|有1则1
按位异或^不同则1,相同则0
按位取反~所有的0变1,,1变0
编译过程中int类型的十进制数据首先要转化成2进制数据参与运算。
按位取反,符号位和数值位都会改变,而按位与,按位或,按位异或则符号位不
变,只变数值位
正数的原码反码补码一致
负数的原码和反码符号位都是1,其他位置相反,0变1,1变0,
补码等于反码+1.
求一下b的反(~b)
int b = 4; 4的2进制就是100
转化成计算机识别的二进制:
00000000 00000000 00000000 00000100
取反: 11111111 11111111 11111111 11111011 得到的这个是取反之后的原
码,接下来求它的补码。它的第一位是1,所以这是个负数。
11111111 11111111 11111111 11111011 先已知原码求反码
反码: 10000000 00000000 00000000 00000100 再已知反码求补码
补码: 10000000 00000000 00000000 00000101 得到的这个补码就是计算机
输出的数据。也就是2进制数据负的101也就等于-5
|