数量在计算机上用二进制格式表示。
数分为有符号的数和没有符号的数。
原码、反码、补码都是带符号固定点数的表示方法。
带符号固定点数的最高位比特为符号比特,0为正,1为副。
以下,都以8位整数为例,
源代码是这个数本身的二进制格式。
例如
0000001是1
1000001是-1
正数的反码和补码都与原始码相同。
负数的逆符号是将该原符号除去符号比特后的各位求逆
[-3]反=[10000011]反=11111100
负数的补码是将其原码用符号位以外的各位反转后,最后一位加1。
[-3]补=[10000011]补=11111101
一个数及其补数是可逆的。
为什么要设置补充代码?
第一,是为了让计算机执行减法。
[a-b]增补=a增补(-b )增补
第二个理由是为了统一正0和负0
正零: 00000000
负零: 10000000
这两个数实际上是0,但他们的源代码有不同的显示。
但是,他们的补码是一样的,都是00000000
特别是,如果1之后有进位,请笔直向前进位,包括符号位。 (这和反码不一样! )
[10000000]候补
=[10000000]反1
=11111111 1
=(1) 00000000
=00000000 (最高有效位溢出,符号位变为0 ) ) )。
有人问
10000000这个补数表示的哪个数的补数呢?
其实这是规定,这个数量表示-128
因此,能用n位补数表现的范围是
-2^(n-1 )至-2^(n-1 )-1
比n位源代码能够表示的数量多一个
又一个例子:
1011
原代码: 01011
反码: 01011 //正数时,反码=原码
补数: 01011 //正数时,补数=原码
-1011
原代码: 11011
反转码: 10100 //负数时,反转码取原码的反转
补数: 10101 //负数时,补数取原码的反1
0.1101
原始代码: 0.1101
解码: 0.1101 //正数时,解码=原码
补数: 0.1101 //正数时,补数=原码
-0.1101
原代码: 1.1101
反转代码: 1.0010 //负数时,反转代码取原代码的反转
补数: 1.0011 //负数时,补数取原码的倒1
总结:
在计算机内,固定点数有原码、反码、补数三种表现法
原代码是前面介绍的二进制点表示法,最高位表示符号位,“0”表示正,“1”表示负,剩下的位表示数值的大小。
在反转表示法中,正数反转码与它的原始码相同的负数反转码,除了编码比特之外,使其原始码按比特反转。
在补数表示法中,正数的补数与其原数相同; 负数的补数是其反码的最后一位加1。
1、原码、反转码、补码的表示方法
(1)源代码)在数值前面直接加符号位的表示法。
例如,编码比特数值比特
[ 7]原=0 0000111 B
[-7]原=1 0000111 B
注意: a .数0的源代码有两种格式。
[ 0]原=00000000B [-0]原=10000000B
b. 8位二进制代码的显示范围:-127~ 127
2 )反码:
正数:正数的反码与原始码相同。
负数:负数的反码。 符号位为“1”,数值部分按位相反。
例如,编码比特数值比特
[ 7]反=0 0000111 B
[-7]反=1 1111000 B
注意: a .数0的反码也有两种形式。 也就是说
[ 0]反=00000000B
[- 0]反=11111111B
b. 8位二进制代码的显示范围:-127~ 127
3 )补数的表示方法
1 )类型概念:一个测量单位称为类型或类型。 例如,时钟以十二进制进行计数周期。 也就是说,将12设为模式。 在时钟上,时针加上12个整数位或减去12个整数位不会改变时针的位置。 14点丢掉冲模12后,变为(下午) 2点) 14=14-12=2)。 从0点逆时针减去10格可减去10小时,从0点顺时针减去2格可加上2小时,也可视为2点(0-10=-10=-10 12=2)。 因此,假设冲模12,-10可以映射为2。 由此可知,在模块数为12的循环系统中,加上2的效果和减去10的效果相同,因此在以12为类型的系统中,减去10的运算都能够通过加上2来置换,将减法问题变换为加法问题。 10和2对冲模12来说互为补数。
同样,由于计算机的运算部件和寄存器有一定的字长限制(字长为8 ),所以其运算也是模拟运算。 当计数器达到8位即256个时,会发生溢出,并且从一开始就进行计数。 溢出量是计数器的模式,明显是8位二进制数,其模式数为28=256。 在计算中,两个互补的数称为“补数”。
2 )补码表示)正数)正数补码与原码相同。
负数:负数的补数在符号位为“1”、数值部分按位反转后,在末尾位(最低位位)上加1。 也就是说,“反码1”。
例如,编码比特数值比特
[ 7]候补=0 0000111 B
[-7]候补=1 1111001 B
补码是微机中重要的代码格式,请注意:
a .采用补数,可以方便地将减法运算转换为加法运算,简化了运算过程。 正数补数是它所表示的数的真值,但负数补数的数值部分不是它所表示的数的真值。 利用补数进行运算,得到的结果仍然是补数。
b .与原码、反码不同,数值0的补码只有一个,[0]补码=00000000B。
c .字长为8位时,补数表示的范围为-128~ 127; 进行补数运算时,请注意得到的结果不要超过能用补数表示的数量范围。