计算机组成原理-计数制与定点数编码

本文详细介绍了进位计数制的转换方法,包括r进制转10进制和10进制转r进制,以及小数部分的转换。此外,还探讨了真值与机器数的概念,特别是定点数的表示,包括无符号数、有符号数的原码、反码和补码。文章还提到了ASCII码和汉字编码,并简述了字符串和汉字字符在计算机中的表示。最后,深入讲解了定点数的补码表示及其在减法运算中的应用,以及移码在整数比较中的优势。
摘要由CSDN通过智能技术生成

前往我的主页以获得更好的阅读体验计算机组成原理-计数制与定点数编码 - DearXuan的主页https://blog.dearxuan.com/2022/03/15/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86-%E8%AE%A1%E6%95%B0%E5%88%B6%E4%B8%8E%E5%AE%9A%E7%82%B9%E6%95%B0%E7%BC%96%E7%A0%81/

进位计数制

r进制转10进制

设r进制数从左到右分别为 R(n) R(n-1) R(n-2) ... R(1) R(0),则该进制数转换为十进制是

R(n)×r^n + R(n-1)×r^(n-1) + ... + R(1)×r + R(0)×1

当 r > 9 时,通常用大写字母来表示 10,11 等,例如 A=10, B=11

10进制转r进制

使用除余方法来转换进制

不断地将10进制数除以r,每次得到的余数都写在上次的余数之前,最后得到的数字就是r进制数

例如将 19 转换为 2 进制,不断地除以 2,得到的余数分别是

19 ÷ 2 = 9 ...... 1
 9 ÷ 2 = 4 ...... 1
 4 ÷ 2 = 2 ...... 0
 2 ÷ 2 = 1 ...... 0
 1 ÷ 2 = 0 ...... 1

因此最后结果是 10011

小数转换

r进制转10进制时,小数部分继续按照上面的公式计算即可,如二进制下的 0.1 转换成10进制是

0.1 × 2^(-1) = 0.5

十进制转r进制时,不断地将小数部分乘上r,并取整数部分,例如将 0.123 转换为 8 进制

0.123 × 8 = 0.984
0.984 × 8 = 7.872
0.872 × 8 = 6.976
0.976 × 8 = 7.808
0.808 × 8 = 6.464
...

因此转换结果是0.07676...

转换时出现无限小数是正常的,只需要保留有效位数即可

真值与机器数

真值是符合人类习惯的数字,是带有符号的

机器数是存粹的以数字形式保存的数字,它不带有任何符号,而是把符号也抽象为一个数字,例如用 1 表示正数,0 表示负数

考点总览

字符与字符串

ASCII码

英文字符在计算机中使用ASCII码表示

ASCII总共有128个字符,因此只需要7位,而在计算机中,使用一个字节表示一个ASCII字符,其中最高位置0

以下是ASCII码表

32~126为可印刷字符,其它字符为控制、通信字符

需要记忆的特殊位置有:

0: 48

A~Z: 65~90

a~z: 97~122

汉字编码

在1980年,中国推出了GB-2312标准,总共拥有7445个常用汉字

GB-2312标准采用区位码来表示汉字,共有94个区和94个位,区和位分别使用一个字节表示,一个汉字字符占两个字节

由于汉字编码也使用了ASCII中的控制字符,为了避免冲突,需要将区位码全部加上32,这样就避开了ASCII码中的控制字符区域,将区位码加上32就得到国标码(GB-2312)

为了避免国标码与ASCII码冲突,在存储时,需要将国标码全部加上128,这样所有的汉字都落到了128~255的范围,而ASCII码全部落到了0~127的范围,于是得到了汉字内码

在输入汉字时,采用输入码,例如拼音,五笔

在输出汉字时,采用字形码,字形码用来显示出汉字的图形

字符串

字符串就是一个字符类型的数组,在计算机中,根据字符位置,按顺序保存字符,通常用"\0"(00H)表示字符串结束

考点总览

定点数

定点数是指小数点位置固定不变的数,例如 12, 5.008

无符号数

无符号数是指整个字长的全部二进制位均为数值,而非符号。因此一个8位二进制数可以表示的范围是 0~255

在讨论无符号数时,如果没有特别说明,一律默认整数,而非小数

有符号数

有符号数的二进制位的最高位用于表示符号,称为符号位,通常用1表示正数,用0表示负数。后7位用于表示数值部分,称为尾数。

表示定点整数时,默认小数部分为0,此时小数点位于第8位后面,即末位的位权为2^0

表示定点小数时,默认整数部分为0。此时小数点位于第1位后面,即末位的位权位2^(-7)

原码

原码是指尾数用来表示真值的的绝对值,符号位 0/1 表示 正/负

已知27的二进制表示为 11011,如果用原码表示 +27,则应该是 0 0011011

已知0.875的二进制表示为 111,如果用原码表示 -0.875,则应该是 1 1110000

原码表示的范围为:整数-127~127,小数0~0.9921875

真值0具有两种原码表示形式,分别是 +0 和 -0

反码

反码的最高位也是符号位,当符号位为0时,反码与原码相同,当符号位为1时,反码的数值位与原码相反。无论是整数还是小数都一视同仁

原码:0 0011001
反码:0 0011001

原码:1 0011001
反码:1 1100110

同样反码的真值0也有两种形式

补码

对于正数来说,补码就是原码;对于负数来说,补码是反码末位加一

原码: 0 0011001
反码: 0 0011001
补码: 0 0011001

原码: 1 0011001
反码: 1 1100110
补码: 1 1100111(注意这里可能需要进位)

在补码中表示 -0 时,其反码是 1 1111111,在最低位加一并不断进位,则变成 0 0000000,最高位前面的1被丢弃,恰好就是 +0 的补码

因此在补码中真值0只有一种形式,即 +0 的形式。多出来的 -0 形式被特殊定义

如果用补码表示定点整数,则1 0000000表示-128

如果用补码表示定点小数,则1 0000000表示-1

使用补码能够让减法运算变得简单,因为在加减运算时,只需要将整个补码看作一个二进制数,然后连同符号位一起相加(无论是加法还是减法都是相加),最终得到的就是计算结果的补码

移码

移码只能用来表示整数,只需要把补码的符号位取反就能得到移码

移码的好处在于能够使用硬件快速比较大小

 如上图所示,当符号相同时,随着数字的增大,移码数值位也在不断变大。因此在比较整数大小时,只需要按顺序从最高位开始注意比较即可

考点总览

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dear_Xuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值