一个数据在计算机中的存储方式是以补码 的方式存储的
下面的例子以int类型来说(占4个字节,每个字节8个比特位)
对于正数来说,原码反码补码都是相同的,如15这个数15=8+4+2+1
原反补码都是:00000000 00000000 00000000 00001111
对于负数首先-15和15的
第一个区别在于原码的第一个位置(符号位),负数的符号位是1
所以-15的
原码是:10000000 00000000 00000000 00001111
第二个区别是反码是原码除了符号位以外全部取反(0->1,1->0)
反码是:11111111 11111111 11111111 11110000
第三个区别是补码是在反码的基础上面加1
补码是:11111111 11111111 11111111 11110001
而在进行与或非和异或这些操作时,都是使用补码来进行操作的
这两个补的是符号位
15>>2就是(去掉最右边两个,再在左边补两个0)
00000000 00000000 00000000 00000011
-15>>2就是(去掉最右边两个,再在左边补两个1)
11111111 11111111 11111111 1111100
注意符号位是1,不移动,最后要换回原码,这里是补码
这个是无符号的补0
-15>>>2就是(去掉最右边两个,再在左边补两个0)(给符号位保留)
00111111 11111111 11111111 1111100