方便回忆,特别记录一下。
整数
原码、反码、补码
首先,带符号的数据类型,首位是符号位,不代表数值。1是负数,0是整数。
正数的三码统一,以8位为例。1就是0000 0001。
负数的原码首位为1,如-1就是1000 0001。反码取反为1111 1110。补码加1为1111 1111。
存储方式
整数以补码的方式存储,正数的补码是自身原码,负数的补码是原码取反再+1。
事实上,计算机中,是只记录补码的。原码和反码,只是为了便于人理解,才加上的。事实上这东西加上后,很容易让人搞混三个码。我建议理解三码关系之后,忘记原码和反码。总是用来换来换去,一段时间不用之后就不知道啥是啥了。
其实完全可以理解为正数的极限之上是负数的极限,负数的极限之下即为正数的极限。如:
8位正极限是127:0111 1111
8位负极限是-128:1000 0000
显然只要不超出数据类型的限制范围,计算,都是不会有问题的。
位运算
正常的位运算,如| & ^就不多说了,只要记住是以补码的方式存储和计算就不会有问题。
看看>>和<<,这两个运算中<<也是正常的,但是>>并不正常,负数运算时,并不是补0位而是补1位。