在计算机的世界里,万物皆01。我们平时听得歌曲,看的电影,使用的软件等等都是由0和1组成。有人说计算机很厉害,比人类聪明,能做各种事情,但事实上,计算机只会处理0和1。由这些0和1组成的有规则的数据叫二进制数据。那二进制数据在计算机里又是什么样的呢?
为什么需要这些码
日常生活中,我们使用十进制来表示数字,比如7,19等。但是,因为计算机只能处理0和1两种状态,所以在计算机的世界里使用二进制来表示数字。比如十进制的7对应的二进制为00000111, 十进制的19对应的二进制为00011001。现实生活中,还有负数的情况,比如-2,这在计算机中如何表示呢?
原码
2的8位二进制表示是00000010,那-2呢?现在我们约定如下,第一位为符号位,0表示正数,1表示负数。那么-2的8位二进制应该为10000010。00000010是2的原码,10000010是-2的原码。
反码
我们知道2+(-2)=0。现在我们使用原码计算一边
|
|
10000100转换为十进制是-4,肯定是不对的。得想办法解决这个问题,于是科学家们发明了反码。对于正数而言,反码与原码相同,对于负数而言,反码是除了符号位不变,其他位按位取反。比如2的反码是00000010, -2的反码是11111101。现在再使用反码计算2+(-2)为
|
|
10000000转换为十进制是-0。这样0的表示就有了两种,+0为00000000,-0为10000000。
补码
现在我们计算1+(-0)
|
|
00000000转换为十进制是0,显然是不对的。看来用反码表示负数也有问题,于是科学家们又发明了补码。对于正数而言,补码与原码相同,对于负数而言,补码是在反码的基础上加1。比如2的补码是00000010, -2的补码是11111110。现在我们再使用补码计算2+(-2)为
|
|
00000000转换为十进制是0。这样0就只有一种表示了。而且之前的-0即10000000可以用来表示-128。
所以在计算机中,采用补码来表示整数。8位有符号整数的范围为(-128, 127),8为无符号整数的范围为(0, 255)。