- byte(字节)在计算机内存中占8bit(位),每一位都是二进制0或者1
- 计算机为了区别数字的正负决定将第一位也就是最高位来标识,0位正,1为负
所以最大的正数为01111111,转换为十进制即+127
值得注意的是计算机中的负数都是以补码形式存在的,所以11111111并不是最大的负数,因为它的原码为10000001,对应-1,是最大的负数
正数的原码,反码,补码都相同
补码是将原码先取反,在加1得到的,例如10010010,先取反为(符号位不变) 11101101,再加一得到11101110
为什么会有补码
1、原码是我们人脑最容易理解的,那我们计算(+1) + (-1) = 00000001(原) + 10000001(原) = 10000010
而10000010代表的应该是(-2),显然与我们的预期(+1) + (-1) = 0 不符,于是人们想出了另一种方法,用反码表示负数
2、反码(除符号位全部取反),那么我们计算(+1) + (-1) = 00000001(反) + 11111110(反) = 11111111(反) = 10000000(原) = (-0),虽然在我们认为 +0,-0 代表的是一样的,但人们为了追求完美,又发明了补码。
3、补码(反码加一),那么我们计算(+1) + (-1) = 00000001(补) + 11111111(补) = 100000000(保留8位为00000000) = 0,正好与原来的00000000相等,解决了 +0 和 -0的问题,那么多出来的 10000000还可以代表-128
网友评论