本文作于2022.1.22,用于本人加深记忆
最高位为符号位,其余为真值部分。即[X]原=符号位+|绝对值|
①优点:真值和其原码表示之间的对应关系简单,容易理解
②缺点:计算机中用原码进行加减运算比较困难;0的表示不唯一。
8位数0的原码:
+0=0 0000000
-0=1 0000000
数0的原码不唯一
对一个机器数X:
若X>0 ,则 [X]反=[X]原
若X<0, 则 [X]反= 对应原码的符号位不变,数值部分按位求反。
例:X= -52=-0110100
[X]原=1 0110100
[X]反=1 1001011
[+0]反=[+0]原= 00000000
[-0]原=10000000
[-0]反=[-0]原数值部分分按位取反= 11111111
数0的反码不唯一
对一个机器数X:
若X>0, 则[X]补=[X]反= [X]原
若X<0, 则[X]补=[X]反+1
例:X= – 52= – 0110100
[X]原=10110100
[X]反=11001011
[X]补= [X]反+1=11001100
[+0]补=[+0]原=00000000
[-0]补=[-0]反+1=11111111+1=00000000(多出来的一位1被舍掉,但注意不能随便舍,其决定二进制数正负)
[+0]补=[-0]补
数0的补码唯一
补码实现了实现将减法运算转换为加法运算
即:
[X+Y]补=[X]补+[Y]补
[X-Y]补=[X+(-Y)]补 =[X]补+[-Y]补
例1:66-51=66+(-51)=15
[+66]补= [+66]原= 01000010
[-51]原=10110011 [-51]补=11001101
[+66]补+ [-51]补= 0 00001111(0代表为正数,并且舍去)=00001111=15
例2:X=-52=-0110100,Y=116=+1110100,求X+Y=?
[X]原=10110100(注意题目X只有7位,因为为负数,最高符号位为1)
[X]补= [X]反+1=11001100
[Y]补= [Y]原=01110100
[X+Y]补= [X]补+ [Y]补=11001100+01110100=0 1000000(0代表为正数,并且舍去)=+1000000
现代计算机系统中,程序设计时,负数可用“-”表示,由编译系统将其转换为补码。
无符号整数的表数范围:0 ≤ X ≤ 2^n-1
当最高位向更高位有进位(或借位)时则产生溢出
原码和反码:-(2^(n-1) -1) ≤ X ≤ 2^(n-1) -1
补码:-2^(n-1) ≤ X ≤ 2^(n-1) -1
对8位二进制数:
原码: -127 ~+127
反码: -127 ~+127
补码: -128 ~+127
两个有符号二进制数相加或相减时,若运算结果超出可表达范围,则产生溢出
最高位进位状态⊕次高位进位状态=1,则结果溢出
除法运算溢出时,产生"除数为0"中断
乘法运算无溢出问题
例:若:X=01111000, Y=01101001,求问X+Y是否溢出
明显最高位进位状态⊕次高位进位状态=1,产生溢出
注意,有可能真值为一个负数,加上符号位反而变正,例如补码数A8H为一个负数,且它求补码以后得到的是1101 1000,由于最高位为符号位,其真值为-101 1000,再加上符号位的负号,补码数A8H对应的原码为0101 1000B=88