2. 码制(原码 反码 补码 移码)

文摘   教育   2024-03-25 19:27   云南  


【目录】


  • 1. 机器数

  • 2. 原码

  • 3. 反码

  • 4. 补码

  • 5. 移码

  • 6. 课堂练习

  • 7. +0与-0

  • 8. 真题回顾

  • 9. 总结


【正文】

1. 机器数

各种数值在计算机中表示的形式称为机器数。

机器数是采用二进制计数制。

数的符号用0和1表示,小数点则隐含,表示不占位置。

机器数对应的实际数值称为数的真值

机器数有无符号数带符号数之分。

无符号数表示正数,在机器数中没有符号位。

对于无符号数,若约定小数点的位置在机器数的最位之后,则是纯整数。

对于无符号数,若约定小数点的位置在机器数的最位之前,则是纯小数。

对于带符号数,机器数的最高位是表示正、负的符号位,其余位则表示数值。

为了便于运算,带符号的机器数可采用原码、反码和补码等不同的编码方法,机器数的这些编码方法称为码制。

2. 原码

原码:最高位表示符号位,其余位表示数值部分。

0表示正数,1表示负数。

【示例】

将5转换为2进制:
5=4+1=2^2+2^0=101

+5的原码为00000101(左边的第一个数字0表示正数,后7个数字表示数值)
-5的原码为10000101(左边的第一个数字1表示负数,后7个数字表示数值)

3. 反码

正数的反码与原码相同。

负数的反码是对其原码的数值位逐位取反,注意符号位不变

【示例】

+5的原码为00000101,反码为00000101。(正数不变)
-5的原码为10000101,反码为11111010。(符号位不变,数值位0变1,1变0)

【解析】

负数的反码符号位不变,则左边第一个数字1不变。
后面的7个数值位取反,即0变成1,1变成0。
因此,-5的原码为10000101,反码为11111010。

4. 补码

正数的补码与原码相同。
负数的补码是其反码加1。

【示例】

+5的原码为00000101,反码为00000101,补码为00000101。(正数的原码、反码、补码相同)
-5的原码为10000101,反码为11111010,补码为11111011。(负数的补码在其反码的基础上+1)

【解析】

补码是在反码的基础上+1即可。

5. 移码

移码是在补码的基础上,将符号位取反

+5的原码为00000101,反码为00000101,补码为00000101,移码为10000101。(第1个数字0取反变成1)
-5的原码为10000101,反码为11111010,补码为11111011,移码为01111011。(第1个数字1取反变成0)

6. 课堂练习

若机器字长n等于8,分别写出+1, -1, +127, -127, +45,- 45,的原码 反码 补码 移码。

【解析】

机器字长n等于8,表示8位二进制数。

【+1与-1】

原码:00000001 10000001(最高位表示符号位,后7位表示数值)
反码:00000001 11111110(负数的符号位不变,数值位取反)
补码:00000001 11111111(负数的符号位不变,数值+1)
移码:10000001 01111111(在补码的基础上,符号位取反)

【+127,  -127】

先将127转换为二进制:
127=64+32+16+8+4+2+1=2^6+2^5+2^4+2^3+2^2+2^1+2^0=1111111

原码:01111111 11111111(最高位表示符号位,后7位表示数值)
反码:01111111 10000000(负数的符号位不变,数值位取反)
补码:01111111 10000001(负数的符号位不变,数值+1)
移码:11111111 00000001(在补码的基础上,符号位取反)

【+45,  -45】

先将45转换为二进制: 45 = 32+8+4+1=2^5+2^3+2^2+2^0=101101

原码:00101101 10101101 (最高位表示符号位,后7位表示数值)
反码:00101101 11010010(负数的符号位不变,数值位取反)
补码:00101101 11010011(负数的符号位不变,数值+1)
移码:10101101 01010011(在补码的基础上,符号位取反)

7. +0与-0

【+0,  -0】

原码:00000000 10000000
反码:00000000 11111111
补码:00000000 00000000
移码:10000000 10000000

数值0的原码表示有两种形式:[+0]原=0 0000000, [-0]原=1 0000000。
数值0的反码表示有两种形式:[+0]反=0 0000000, [-0]反=11111111。
数值0的补码是唯一的:[+0]补=0 0000000, [-0]补=00000000
数值0的反码是唯一的:[+0]移=1 0000000 [-0]移=10000000

0是一个特殊的数字,大家注意补码和移码中,+0,  -0的编码相同。

8. 真题回顾

如果2x的补码是90H,那么X的真值是()。

A. 72
B. -56
C. 56
D. 111

【思路解析】

90H中的H表示90是十六进制。

  • 首先将90H转换成二进制。

16进制转二进制用4分法,将一个数字拆成4位二进制数。

9 = 8+1 = 2^3+2^0 = 1001
0 = 0000
90H = 10010000

  • 将补码换算成原码(从后往前推,90H是补码,先求补码,然后推出反码,最后推出原码)
    原码:11110000
    反码:10001111(反码取反得原码)
    补码:10010000(补码-1得反码)

  • 将原码的二进制转十进制
    2进制转10进制用乘法(乘以权值2)
    最高位的1表示该数是负数
    11110000 = - (2^6+2^5+2^4)= -(64+32+16)=-112
    2x=-112
    x=-56

正确答案:B

9. 总结

  • 原码:最高位是符号位。0表示正数,1表示负数。

  • 反码:正数的反码与原码相同。负数的反码是对其原码的数值位逐位取反,注意符号位不变

  • 补码:正数的补码与原码相同。负数的补码是其反码加1。

  • 移码:补码的基础上,将符号位取反

  • 计算方法

1
  • 本节总结

  • 章节总结


                                                  

安迪python学习笔记
python学习笔记,适合初学者。
 最新文章