首页 > 代码库 > 有符号数处理
有符号数处理
在数学中,任意基数的负数都在最前面加上“−”符号来表示。在计算机硬件中,数字都以无符号的二进制形式表示,因此需要一种将负数编码为二进制形式的方法。
当前有以下四种方法,用于扩展二进制数字系统,来表示有符号数:
原码(sign-and-magnitude),
反码(ones‘ complement),
补码(two‘s complement),
移码(excess-N)。
在学习原码, 反码、补码和移码之前, 需要先了解机器数和真值概念。
1、机器数
机器数:数在计算机中的二进制表示形式。
机器数是带符号的,在计算机中用二进制数的最高位存放符号, 正数为0, 负数为1。
例如:
计算机字长为8位,则:
十进制数+3 ,转换成二进制00000011,
十进制数-3 ,转换成二进制10000011。
那么,这里的00000011和10000011就是机器数。
2、真值
因为二进制数的最高位是符号位,所以机器数的形式值就不等于真正的数值。为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。即第一位用+-表示数字的正负,其余为二进制数。
例如:
0000 0001的真值= +000 0001,1000 0001的真值= –000 0001。
3、原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
下图为原码计算公式:
4、反码
反码的表示方法正负数不同:
正数的反码是其本身,
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
下图为反码计算公式:
5、补码
补码的表示方法正负数也不同:
正数的补码就是其本身,
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基
础上+1)。
下图为补码计算公式:
6、移码
移码,是将二进制原码无符号整数所代表的值,减去一个预设值。
标准移码,预设值为二进制原码表示的最大整数的一半。 一个数的标准移码和补码,最高位相反,其余各位均相同。即不管正负数,只要将其补码的符号位取反即可。
下图为移码计算公式:
PS:正数的原、反、补码都一样;0的原码跟反码都有两个,因为这里0被分为+0和-0;0的补码是唯一的。
有符号数处理