本文介绍原码、反码和补码.
在计算机中规定采用字节(Byte)、字(Word)、双字(Double Word)等单位表示数据.
在计算机中,对带符号数可用真值和机器数来表示. 所谓真值,就是带有 “+”、“-” 号的实际数值;所谓机器数,则是把 “+”、“-” 号数值化后所得到计算机实际能表示的数.
在下面的描述中,规定二进制数以字节、字或双字表示. 当十进制转换为二进制数时,不够8位或16位,高位用0补齐. 为简便,以下均以字节机器数为例.
机器数有三种码表示,分别是原码、反码和补码. 汇编语言中,数都是以补码的形式表示的,因此必须掌握数的补码表示和补码的运算.
例 1 十进制数 +5 和 -5 分别表示成二进制数原码、反码和补码.
[ + 5 ] 原 = [ + 5 ] 反 = [ + 5 ] 补 = 0000 0101 B [+5]_{原}=[+5]_{反}=[+5]_{补}=0000\text{ }0101\text{ B} [+5]原=[+5]反=[+5]补=0000 0101 B
[ − 5 ] 原 = 1000 0101 B [-5]_{原}=1000\text{ }0101\text{ B} [−5]原=1000 0101 B
[ − 5 ] 反 = 1111 1010 B [-5]_{反}=1111\text{ }1010\text{ B} [−5]反=1111 1010 B
[ − 5 ] 补 = 1111 1011 B [-5]_{补}=1111\text{ }1011\text{ B} [−5]补=1111 1011 B
例 2 变量 x x x、 y y y 是十进制数. x = 106 x=106 x=106, y = − 106 y=-106 y=−106,求其原码、反码和补码.
原码:
[ x ] 原 = 0110 1010 B = 6A H [x]_{原}=0110\text{ }1010\text{ B}=\text{6A H} [x]原=0110 1010 B=6A H
[ y ] 原 = 1110 1010 B = EA H [y]_{原}=1110\text{ }1010\text{ B}=\text{EA H} [y]原=1110 1010 B=EA H
反码:
[ x ] 反 = 0110 1010 B [x]_{反}=0110\text{ }1010\text{ B} [x]反=0110 1010 B
[ y ] 反 = 1001 0101 B [y]_{反}=1001\text{ }0101\text{ B} [y]反=1001 0101 B
补码:
[ x ] 补 = 0110 1010 B [x]_{补}=0110\text{ }1010\text{ B} [x]补=0110 1010 B
[ y ] 补 = 1001 0110 B [y]_{补}=1001\text{ }0110\text{ B} [y]补=1001 0110 B
[ x ] 补 = 2 n − ∣ x ∣ [x]_{补}=2^n-|x| [x]补=2n−∣x∣ 其中, n n n等于二进制位数.
例 3 n = 8 n=8 n=8,求 [ − 5 ] 补 [-5]_{补} [−5]补, [ − 128 ] 补 [-128]_{补} [−128]补 .
[ − 5 ] 补 = 2 8 − 5 = 1 0000 0000 B − 101 B = 1111 1011 B = FB H [-5]_{补}=2^8-5=1\text{ }0000\text{ }0000\text{ B}-101\text{ B}=1111\text{ }1011\text{ B}=\text{FB H} [−5]补=28−5=1 0000 0000 B−101 B=1111 1011 B=FB H
[ − 128 ] 补 = 2 8 − 128 = 1 0000 0000 B − 1000 0000 B = 1000 0000 B = 80 H [-128]_{补}=2^8-128=1\text{ }0000\text{ }0000\text{ B}-1000\text{ }0000\text{ B}=1000\text{ }0000\text{ B}=\text{80 H} [−128]补=28−128=1 0000 0000 B−1000 0000 B=1000 0000 B=80 H
对负数补码的数值位再求反加1,且符号位变成 “-”,就得到其真值. 正数直接从补码得到真值.
例 3 给出补码,求其十进制真值.
0010 0010 B = [ + 34 ] 补 0010\text{ }0010\text{ B}=[+34]_{补} 0010 0010 B=[+34]补
1001 0011 B = − 110 1101 B = [ − 109 ] 补 1001\text{ }0011\text{ B}=-110\text{ }1101\text{ B}=[-109]_{补} 1001 0011 B=−110 1101 B=[−109]补