数制和编码
为什么计算机使用二进制编码
- 二进制只有两种状态,元件制造成本低;
- 1 和 0 刚好提供了逻辑值“真”和“假”,方便实现逻辑运算;
- 编码和运算规则简单,方便通过逻辑门电路来实现。
进制转换
进位计数法
常见的进位计数法有十进制、二进制、八进制、十六进制等,一般逢 就进一位,这里的 被称为基数。
一般来说,二进制转换到八进制或十六进制比较简单,因为 、 都是 的倍数,只需要将二进制每三/四位分为一组,再将每组转换为对应进制的数即可。
对于其他进制而言,可以先将其转换为 进制,再进行转换。
将整数从十进制转换到任意进制需要用到 除基取余法 ,即除以要转换进制的基数,得到余数,并对商再次进行同样的操作,直到商为 ,最后将余数按照 从下到上 的顺序排列即可,如求 的二进制:
可以得到其二进制数为 .
对于小数,需要使用 乘基取整法,即乘以基数,取其整数部分,直到乘积为 或精度符合要求之后结束,最后按照 从上到下 的顺序排列。
位 进制和 进制数分别能表示 个数字,这也是计算机运算存在误差的原因,它表示仅有 的概率十进制数可以用二进制表示。
BCD 码
二进制编码的十进制数(),采用 位二进制数来表示 位十进制数(),此法可以使得二进制和十进制转换得以快速进行,但是有冗余状态。
常用 码:
- 码,有权码,即 ,若两个 码相加小于等于 ,则不需要修正,若大于 ,则需要加 修正,因为落在这个区间内为无效码。
- 余 码:无权码,在 码的基础上加 形成的,因此每个数都多余 ,这样相加就不需要修正了。
- 码,有权码,即 ,特点是大于等于 的 位二进制数中最高位为 ,小于 的最高位为 .
ASCLL 码
码使用指定的 位或 位二进制数组合来表示 或 种可能的字符。标准 码也叫基础 码,使用 位二进制数(剩下的 位二进制为 )来表示所有的大写和小写字母,数字 到 、标点符号,以及在美式英语中使用的特殊控 制字符。其中: 及 (共 个) 是控制字符或通信专用字符,这些字符不可以显示。
常用的符号 码如下
| 符号 | 编码 |
|---|---|
| 空格 | 20H |
| 1 | 31 H |
| A | 41 H |
| a | 61 H |
汉字编码
区位码:使用两个字节表示一个汉字,每个字节使用七位编码,将汉字和符号排列在一个表中,两个字节分别表示横纵坐标;
国标码:区位码的十六进制加上 ,这是为了兼容不支持汉字的机器,防止被转换为 中的控制字符 ;
汉字内码:国标码的十六进制加上 ,直接跳过 的范围。
汉字的内码有:
- GB2312-1980
- GBK
- GB18030-2000
- ISO/IEC10646-1、Unicode 2.0
定点数的编码表示
根据小数点的位置是否固定,计算机中有两种数据格式:定点表示和浮点表示。
常用定点补码整数表示整数,定点原码小数表示浮点数的尾数部分,移码表示浮点数的阶码部分。
定点整数和定点小数没啥好说的,第一位是符号位,其他是数值位,但是注意小数转换为补码时,最后的 不需要变为 ,如 应该先对最后一个 以前的数取反 ,即最后的 不变,再加一得到 .
定点整数/小数都是纯整数/小数,即只有整数/小数部分。
表示方法主要有 4 种:原码、补码、反码和移码。
原码:原码首位表示正负,其他位表示数值绝对值大小。
补码:原码的加减比较复杂,因此提出了补码来方便计算。 方式为 除了符号位按位取反再加 1,要求负数的原码只需要再次求补即可。
变形补码:又称 模4补码 ,即用两个二进制位来表示数字的符号位,其余与补码相同,用 表示正,用 表示负,用变形补码进行加减运算时,当运算结果的符号位出现 ,则表示产生正/负溢。
原码有两个 ,正零()和负零();补码只有一个 (),补码()表示的是 ,即 ;可以认为,在补码中,原来的负零被分配到表示最小的数去了。
反码:负数则数值位取反即可。
移码:移码常用来表示浮点数的阶数,且 只能用来表示整数。 移码就是真值加了一个常数 ,其中机器字节长为 ,其和补码 符号位相反。
负数的反码/补码的数值部分越大/小,绝对值越小/大,真值越大/小,越靠近/远离 .
运算方法和运算电路
基本运算部件
计算机中运算器由 、移位器、状态寄存器和通用寄存器组成。 的核心是加法器。
一位全加器
全加器()是最基本的加法单元,输入为两个加数和低位传来的进位,输出为一个结果和进位。
和表达式为 ,进位表达式为
串行进位加法器
将一些全加器串联可以得到串行进位加法器,每一级的进位依赖于前一级的输出,因此整个计算过程是串行的,严重影响计算时间。