205.码制

1.定义

      计算机中的数是用二进制来表示。数的符号也是用二进制表示的。在机器中,把一个数连同其符号在内数值化表示的数成为机器数。机器数可以用不同的码制来表示,常用的有原码、补码、反码表示法。一般用最高有效位表示数的符号,正数用0表示,负数用1表示。

     原码由真值得来,真值(人理解的数 +3 -3 +1.5 -1.5)是一个变量本身所具有的真实值,是一个理想概念,一般无法得到。

 

2.原码

 2.1真值化原码

整数 +5D -5D
1 取绝对值 [+5]真值→|+5|=5 [-5]真值→|-5|=5
2 化二进制 (5)10=(0101)2=0101B (5)10=(0101)2=0101B
3 加正负号(此时位机器真值) 0101B加符号 → +0101B机器真值 0101B加符号 → -0101B机器真值

4 标准化

(符号位正为0负为1,尾数外中间补0)

+0101B=0 000 0101B -0101B=1 000 0101B
[+5]原码=0 000 0101B [-5]原码=1 000 0101B

 

纯小数 +0.8125D -0.8125D
1 取绝对值 |+0.8125|=0.8125 |-0.8125|=0.8125
2 化二进制 (0.8125)10=(0.1101)2=0.1101B (0.8125)10=(0.1101)2=0.1101B
3 加正负号 0.1101B加符号 → +0.1101 0.1101B加符号 → -0.1101B机器真值

4 标准化

(符号位正为0负为1,右补足8位)

+0.1101B=0.1101 000B -0.1101B=1.1101 000B
[+0.8125]原码=0.1101 000B [-0.8125]原码=1.1101 000B

 纯小数表示范围为(-1,1),所以8位0.1101 000B存储为0110 1000,并不会和0110 1000表示的整数冲突

 

3.反码

 正数 原码、反码、补码 一样

 负数 反码在原码基础上,符号位不变,其他位按位取反

[+5]=[+5]=[+5]=0 000 0101B
[-5]=   1 000 0101 B

[-5]=[-5]+1=111 1011B

                    末位加一

符号位不变↓其余按位取反
[-5]=   1 111 1010 B
 [+0.8125]=[+0.8125]=[+0.8125]=0.1101 000 B
 [-0.8125]=1.1101 000

[-0.8125]=[-0.8125]+0.000 0001

=1.001 0111+0.000 0001=1.001 1000

      符号位不变↓其余按位取反
 [-0.8125]=1.0010 111

4.补码

4.1定义

补码表示法中,

正数采用 符号-绝对值 表示,即数的最高有效位为0表示正,数的其余部分则表示数的绝对值

机器字长8位:

[+1] = 0 000 0001

[+127] = 0 111 111

[+0] = 0000 0000

补码表示负数,n位机器字长表示负数X为 2n-|X|

机器字长8位:

[-1] = 28-1 = 1 111 1111

[-127] = 28-127 = 1 000 0001

[-0] = 28-0 = 0000 0000

注意

补码表示法中0只有一种表示即 0000 0000

对于1000 0000,在补码表示法中被定义为  -128

8位 原码 反码 补码
+0 0000 0000 0000 0000    0000 0000
-0 1000 0000 1111 1111 1 0000 0000 cf=1
范围 -127D˜127D -127D˜127D -128D˜127D

8位可以表示28个不同的数,+0和-0补码都是0000 0000,空一个表示-128

 

4.2转化

正数

  原码、反码、补码 一样

负数

  法一:补码在反码基础上,末位加一 

[+5]=[+5]=[+5]=0 000 0101B
[-5]=   1 000 0101 B

[-5]=[-5]+1=111 1011B

                    末位加一

符号位不变↓↓其余按位取反
[-5]=   1 111 1010 B
 [+0.8125]=[+0.8125]=[+0.8125]=0.1101 000 B
 [-0.8125]=1.1101 000

[-0.8125]=[-0.8125]+0.000 0001

=1.001 0111+0.000 0001=1.001 1000

      符号位不变↓↓其余按位取反
 [-0.8125]=1.0010 111

  法二:对于一个正数的补码表示  按位求反后再在末位加一  可以得到与此正数相对于的负数的补码表示

  机器字长为8位 机器字长为16为
  -46D的补码 -117D的补码

1  先写出与该数相对应的

正数的补码表示(符号-绝对值法)

+46D的补码表示为

0010 1110

+117D的补码表示为

0000 0000 0111 0101

2  将其按位取反 1101 0001 1111 1111 1000 1010
3  在末位(最低位)加一 1101 0010 1111 1111 1000 1011
4  用十六进制表示 D       2 F       F       8      B
5  结果 [-46] = D2H [-117] = FF8BH

 

4.3计算

4.3.1求补运算

定义

对于一个二进制数→按位求反→在末位加一  的运算称为求补运算

 

推理

补码表示的数具有以下特性:

  [X]   求补得› [-X]  求补得›  [X]

  [117]=0075H [-117]=FF8BH

对[-117]

作求补运算

[-117] 1111 1111 1000 1011
按位求反后得 0000 0000 0111 0100
末位加一后得 0000 0000 0111 0101
  [-117] 0000 0000 0111 0101

4.3.2加减运算

补码的加法规则:

  [X+Y] = [X] + [Y]

补码的减法规则:

  [X-Y] = [X] + [-Y]

其中[-Y] 只要对[Y]求补就可得到

  [Y]补  → 所以位按位取反 → 末位加一 → [-Y] 

十进制 二进制
  +25   0001 1001
+ +32 + 0010 0000
= 57 = 0011 1001
       
  +32   0010 0000
+ -25 + 1110 0111
= 7 = 0000 0111
      ↓1
       
  -25   1110 0111
+ -32 + 1110 0000
= -57 = 1100 0111
      ↓1
       
  25   0001 1001
+ -32 + 1110 0000
= -7 = 1111 1001

 

十进制 二进制
  25   0001 1001   0001 1001
- 32 - 0010 0000 + 1110 0000
= -7 对减数求补换成加法 = 1111 1001
           
  -25   1110 0111   1110 0111
- -32 - 1110 0000 + 0010 0000
= 7 对减数求补换成加法 = 0000 0111
          ↓1

 

5.符号扩展

符号扩展是指一个数从位数较少扩展到位数较多(如从8为扩展到16位,或从16位扩展到32位)

补码表示数的符号扩展,对于补码表示的数,正数的符号扩展应该在前面补0,而负数扩展则应该在前面补1

机器字长为8位 [+46]=                 0010 1110 [-46]=                 1101 0010
扩展到16位 [+46]= 0000 0000 0010 1110 [-46]= 1111 1111 1101 0010

 

6.数的表示范围

6.1n位补码

一般来说n位补码表示的数的表示范围是 -2n-1 ≤ N ≤ 2n-1-1

8位二进制数可以表示28=256个数,当他们是补码表示带符号数时,他们表数范围为-128 ≤ N ≤ +127

n=16时的表数范围是-32768 ≤ N ≤ +32767

 

为了扩大表数范围,在机器里,可以用二个机器字(低位字和高位字)来表示一个机器数,这种数称为双字长数或双精度数,其中高位字的最高有效位为符号位。

机器字长为16位为例,高位字的低15位和整个低位字的16位联合组成31位数来表示数值,因而低位字的最高有效位没有符号意义只有数值意义,双字长数的表数范围可扩大到 -231 ≤ N ≤ 231-1

15 14              0 15                   0
符号 高位字 低位字
  补码值

 

 

 

 

posted @ 2019-07-07 20:20  Zander_Zhao  阅读(563)  评论(0编辑  收藏  举报