一个正常的数含有符号位和小数点,数据存储在计算机中,一要受二进制存储空间的位数的限制,二要对符号位和小数点进行处理。符号位的处理是通过符号位的数值化来完成的,而小数点的处理是通过定点数和浮点数来体现的。
1.机器数与真值 一个带符号的二进制数由两部分组成,即数的符号部分和数的数值部分。符号通常用“+”和“-”来表示正和负。习惯上,在计算机中用“0”表示“+”,用“1”表示“-”。例如,带符号的数+1010111可以表示为0(符号位)1010111。这种把符号数值化了的数据表示形式称为机器数,把原来带有“+”“-”的数据表示形式称为真值。
2.原码反码补码 在计算机中,表示机器数的常用方法有3种:原码、反码和补码。在这3种机器数的表示形式中,符号部分的规定是相同的,不同的仅是数值部分的表示形式。不同的表示形式,运算的方式也不同。
(1)原码 数值的原码表示方法为:假设数据长度为 n 位二进制数,将最高位用作符号位,其余 n -1位代表数值本身的绝对值(以二进制形式表示)。例如,假设数据长度为8位,+7的原码为00000111,-7的原码为10000111。
(2)反码 一个正数的反码与原码相同。负数的反码的最高符号位为1,其余各位为该数绝对值的原码按位取反(1变0、0变1)。例如,+7的反码为00000111,-7的反码为11111000。
(3)补码 正数的补码与原码相同。负数的补码等于它的反码加1。例如,+7的补码为00000111,-7的补码为11111001。
补码表示法可以将加减法运算统一用加法完成,从而简化机器的运算器电路。