各种数据在计算机中的表示称为机器数,其特点是采用二进制计数制,数的符号用0或1表示,小数点则隐含表示而不占位置。机器数对应的实际数值称为数的真值。
机器数有无符号和有符号之分。无符号数表示正数,在机器数中没有符号位只有数值位。有符号数的最高位为符号位,用于表示数值的正负,除最高位以外,其余位为数值位。小数点在机器数最低数值位之后的数为纯整数,小数点在机器数最高数值位之前的数为纯小数。
为了方便运算,有符号的机器数可采用原码、反码、和补码等不同的编码方法,机器数的这些编码方法称为码制。
(1)原码表示法
数值X的原码记为[X]原,如果机器字长为n(即采用n个二进制位表示数据),则最高位位符号位,符号位为‘0’表示正号,符号位为‘1’表示负号,其余的n-1位表示此数值的绝对值。
数值零的原码表示有两种形式:
正零[+0]原=00000000,负零[-0]原=10000000
例:如果机器字长n等于8,则
[+1]原=00000001[-1]原=10000001
[+127]原=01111111[-127]原=11111111
[+66]原=01000010[-66]原=11000010
[+0.5]原=0.1000000[-0.5]原=1.1000000
(2)反码表示法
数值X的反码记作[X]反,如果机器字长为n,则最高位是符号位,0表示正号,1表示负号,正数的反码与原码相同,负数的反码则是其绝对值按位取反。数值零的反码表示有两种形式:[+0]反=00000000,[-0]反=11111111。
例:如果机器字长n等于8,则
[+1]反=00000001[-1]反=11111110
[+127]反=01111111[-127]反=10000000
[+66]反=01000010[-66]反=10111101
[+0.5]反=0.1000000[-0.5]反=1.0111111
(3)补码表示法
数值X的补码记作[X]补,如果机器字长为n,则最高位为符号位,正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1。在补码表示中,0有唯一的编码:[+0]补=00000000,[-0]补=00000000。
例:如果机器字长n等于8,则
[+1]补=00000001[-1]补=11111111
[+127]补=01111111[-127]补=10000001
[+66]补=01000010[-66]补=10111110
[+0.5]补=0.1000000[-0.5]补=1.1000000
(4)移码表示法
数值X的移码记作[X]移,移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。如果机器字长为n,在偏移2n-1的情况下,只要将补码的符号位取反便可获得相应的移码表示。
例:如果机器字长n等于8,则
[+1]移=10000001[-1]移=01111111
[+127]移=11111111[-127]移=00000001
[+66]移=11000010[-66]移=00111110
[+0.5]移=1.1000000[-0.5]移=0.1000000
[+0]移=10000000[-0]移=00000000
1、为什么要使用补码?
以整数运算1-1为例子:
码制 | 1 | -1 | 1+(-1) |
原码 | 0000 0001 | 1000 0001 | 1000 0010(-2) |
反码 | 0000 0001 | 1111 1110 | 1111 1111(-0) |
补码 | 0000 0001 | 1111 1111 | 0000 0000(0) |
移码 | 1000 0001 | 0111 1111 | 0000 0000(+0) |
2、补码加、减法
计算机中为了方便计算,所有数据都是以补码的形式存储的。
① 补码加法的运算规则是:和的补码等于补码求和,即[X+Y]补=[X]补+[Y]补。
② 补码减法的方法是:差的补码等于被减数的补码加上减数取负后的补码。在补码表示中,可将减法运算转换为加法运算,即[X-Y]补=[X]补+[-Y]补。
③ 由[X]补求[-X]补的方法是:[X]补的各位取反(包括符号位),末尾加“1”。
例:设二进制整数X=+1000100,Y=+1110,求X+Y、X-Y的值。
解:设用8位补码表示带符号数据,所以[X]补=01000100,[Y]补=00001110,[-Y]补=11110010。
由于X和Y都是正数,所以X+Y的值就等于[X]补+[Y]补,即X+Y=+1010010;由于X的绝对值大于Y的绝对值,所以X-Y的值就等于[X]补+[-Y]补,X-Y=+110110。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!