本博文介绍了数值在机算计中的表示形式以及原码、反码、补码的概念和定义。
定义
各种数值在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用0和1表示,小数点则隐含,表示不占位置。机器数的对应的实际数值称为数的真值。
机器数有无符号数和带符号数之分。无符号数表示正数,在机器数中没有符号位。对于无符号数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在机器数的最高维护之前,则是纯小数。对于带符号数,机器数的最高位是表示正负的符号位,其余位表示数值。
为了便于运算,带符号的机器数可以采用原码、反码和补码等不同额编码方式,机器数的这些编码方法称为码zhi。
1、原码表示法
在原码表示法中,最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值。数值0的原码表示有两种形式:[+0]原=0 0000000,[-0]原=1 0000000。
[+1]原=0 0000001 [-1]原=1 0000001
[+127]原= 0 1111111 [-127]原= 1 1111111
[+45]原= 0 0101101 [-45]原= 1 0101101
2、反码表示法
在反码表示法中,最高位是符号位,0表示正号,1表示负号,正数的反码与原码相同,负数的反码则是其绝对值按位求反。请留意是绝对值按位求反,也就是不包括符号位,比如[-127]原=11111111,那么反码就是绝对值取反[-127]反=10000000.
数值0的反码有两种表示形式:[+0]反=0 0000000,[-0]反=1 1111111.
[+1]反=0 0000001 [-1]反=1 1111110
[+127]反= 0 1111111 [-127]反= 1 0000000
[+45]反= 0 0101101 [-45]反= 1 1010010
3、补码表示法
在补码表示法中,最高位是符号位,0表示正号,1表示负号,正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1.在补码表示法中,0有唯一的编码:[+0]补=0 0000000,[-0]补=00000000.
[+1]补=0 0000001 [-1]补=1 1111111
[+127]补= 0 1111111 [-127]补= 1 0000001
[+45]补= 0 0101101 [-45]补= 1 1010011
当机器字长为n时,定点数,也就是小数点的位置不变的数的补码和移码可表示2的n次方个数,但是其原码和反码只能表示2的n次方减去1个数,也就是少一个数,原因是0占用了两个编码。
4、总结
首先判断符号位(最高位),为 0,表示该数为正数
正数的原码、反码、补码不变
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。 (即在反码的基础上+1)