引言
正负数在计算机中是靠二进制首位的符号位来区分的,首位为0则是正数,为1则是负数。
比如+0为0,0000000,-0为1,0000000。
以下以8位二进制数为例,8位二进制数的组成分为符号位和数值位。第一个比特代表符号位,后七位代表数值位。
由于后七位数值最多为1111111,即127。因此8位的有符号数范围是-128-127。
对负数的操作
计算机对负数的使用得经过原码->反码->补码的换算。以下分别介绍原码,反码,补码的概念。
原码
定义:
与二进制相同,负数则将首位改为1
举例:
+15原码为:0,0001111
-15原码为:1,0001111
反码
定义:
若原码为正数时,和原码一样
若原码为负数时,符号位不变,其余位取反
举例:
+15的反码为:0,0001111
-15的反码为:1,1110000
补码
定义:
正数的补码与其原码相同;
负数的补码则取反码后加1。
举例:
+15的补码为:0,0001111
-15的补码为:1,1110001
解释:1,0001111(原码) -> 1,1110000 + 1(取反码 + 1) -> 1,1110001(补码)
总结
由于计算机只算加法,因此正数的原码,反码,补码都一样,而计算机对负数才进行原码变反码再变补码的操作。
运算时的转换
比如计算机要计算15-15,由于计算机只算加法,便会看成15+(-15)。
对于15,是正数,直接使用15的二进制0,0001111;
对于-15,是负数,得通过原码->反码->补码的换算才能使用,因此使用-15的补码1,1110001计算。
于是15+(-15) = 0,0001111 + 1,1110001 = 100000000,取后八位00000000,即为0。