#D211. 计算机编码系统
计算机编码系统
认识二进制系统
认识二进制
所有计算机都是电子设备,可以做一件事:检测电信号是“打开”还是“关闭”。因此,早期的计算机科学家认识到,用只有数字和(基数为)的二进制数系统, 比我们生活中常用的十进制数(基数为)系统对操作计算机更为便捷。
基数:某进制中所用到的数字符号的个数。在基数为 的计数制中包含共 个数字符号,进位规律是逢进一,称为进制。
位权:用来表示不同数位上数值的大小的一个固定常数,不同的数位位权不同。
人们把每个二进制称为位 (bit)。表示“开”或“真”,表示“关”或“假”。
十进制转换为二进制
十进制整数转换为二进制
方法:短除取余
十进制数除以,得到的商值继续除以,依此步骤继续向下运算直到商为为止,从商为时的余数开始,倒序输出余数,即为我们要求的二进制数。
例题:将53用二进制数表示
方法一:用列式表示
第一步:用53不断的短除2,直到商为0,余数保存下来;
(1)
(2)
(3)
(4)
(5)
(6)
第二步:从商为时的余数开始倒序输出余数即为我们要求的二进制数。所以
方法二:用短除式表示
十进制小数转换为二进制
方法:乘取整
每次与相乘,整数值放一边,直到整数部分到为止,再顺序写出整数值,就是十进制小数部分转换成二进制的结果。 如果整数部分不能为,进入无限循环,则二进制数进入无限循环。
再顺序写出整数值,注意循环节,就是十进制小数部分转换成二进制的结果。 例题: (1) 写出的二进制码
====取出整数部分
====取出整数部分
====取出整数部分
从上到下写出整数部分为:
(2)写出的二进制码
====取出整数部分
====取出整数部分
====取出整数部分
====取出整数部分
====取出整数部分
从上到下写出整数 的二进制数是
例题:将用二进制数表示
既有整数又有小数,分开转化,
整数部分除取余进行转化;小数部分乘取整进行转化。
的二进制为
∴
二进制转换为十进制
方法:按权展开求和
(1)先将二进制的数写成加权系数与该位上的数的乘积展开式;
(2)再根据十进制的加法规则进行求和。
二进制数的基数是
第位的位权是
例题:
(1)将二进制数转换为十进制数
(2)将二进制转换为十进制数
$(0 . 1 1 1)_{2} = 1 * 2^{ - 1} + 1 * 2^{ - 2} + 1 * 2^{ - 3}$
= $1 * \frac{1}{2} + 1 * \frac{1}{2^{2}} + 1 * \frac{1}{2^{3}}$
(3)将二进制转换为十进制数 $= 1 * 2^{2} + 1 * 2^{0} + 1 * 2^{ - 1} + 1 * 2^{ - 3}$
八进制和十六进制与二进制的互换
计算机中的存储是以二进制来进行存储的,对于一个稍微大点的数(十进制),用二进制存储会变得很长,譬如,存储成二进制就是,人们为了解决存储很长,但又要保留二进制的便利性,提出了八进制和十六进制。
人们将位二进制数字组合在一起,表示一个基数8位的数字称为八进制;
而将位二进制数字组合在一起,表示一个基数位的数字并称为十六进制。
下表显示了这些基准中的等效值:
从上表可知,用个二进制数字表示的最大值是,用位表示的最大值是。
进制的数字表示是到;
进制的表示是, A-F
(表示, 譬如A
代表, B
代表, 以此类推)。
1、二进制转成八进制/十六进制
如果是八进制,从右往左每三位二进制转换成一位八进制; 如果是十六进制,从右往左每四位二进制转换成一位十六进制;
如果在转换的过程中,不够三位 (或四位),那么在最左边补0凑成三位(或四位)
$1 0 0 1 0 1 0 1 0_{2} = 0 0 1 0 0 1 0 1 0 1 0_{2} = 1 1 2 6_{8}$
$1 0 0 1 0 1 1 0_{2} = 0 0 1 0 0 1 0 1 0 1 0_{2} = 2 5 6_{1 6}$
例题:
(1) 写出的八进制数
解题过程:
第一步:从右到左,每三位一组,最左边一组只有个,因此在左边补齐个,(因为在左边补0不会影响该数的大小)。
第二步:每三位转换成一位八进制
$0 0 1 0 1 0 1 1 0 1 1 1 0 1 0 1 2 = 1 2 7 3 6 5_{8}$
(2) 写出的十六进制数
解题过程:
第一步:从右到左,每四位一组,刚好分成4组。
第二步:每四位转换成一位十六进制
$1 0 1 0 1 1 0 1 1 1 1 0 1 0 1 2 = \textrm{A E F} 5_{1 6}$
2、八进制/十六进制转成二进制
八进制转二进制的过程和二进制转八进制的过程是相反的,是将一位八进制用等值的三位二进制来替换,最左边的一位八进制如果转成的三位二进制有前导0,忽略前导0,因为它们不影响数的大小;
十六进制转二进制的过程和二进制转十六进制的过程是相反的,是将一位十六进制用等值的四位二进制来替换,最左边的一位十六进制如果转成的四位二进制有前导0,而忽略前导0,因为它们不影响数的大小。
例题:
(1)将八进制数36018转换成二进制数
解题过程:
第一步:将每个八进制用等值的三位二进制来表示。
第二步:忽略前导0
$3 6 0 1 8 = 0 1 1 1 1 0 0 0 0 0 0 1_{2} = 1 1 1 1 0 0 0 0 0 0 1_{2}$
(2)将十六进制数转换成二进制数 解题过程:
第一步:将每个十六进制用等值的四位二进制来表示。
第二步:忽略前导
$2 A O D_{1 6} = 0 0 1 0 1 0 0 0 0 0 1 1 0 1_{2} = 1 0 1 0 0 0 0 0 0 1 1 0 1 0 1 0 1_2$
任意进制转换为十进制
十进制数,基数是,第 位的位权是
二进制数,基数是,第位的位权是
八进制数,基数是,第位的位权是
十六进制数,基数是,第位的位权是
进制数,基数是 ,第位的位权是
1、任意进制数转换成十进制数 我们利用10的幂方来表示一个十进制数,需要记住两个定律: = 任何非零数的次方等于; 任何数和相乘为。
因此:
$4 3 8 1 = 4 * 1 0 0 0 + 3 * 1 0 0 + 8 * 1 0 + 1 = 4 * 1 0^{3} + 3 * 1 0^{2} + 8 * 1 0^{1} + 1 * 1 0 ^{0}$
$5 0 0 7 0 = 5 * 1 0^{4} + 0 * 1 0^{3} + 0 * 1 0^{2} + 7 * 1 0^{1} + 0 * 1 0^{1} = 50000 + 70$
这叫位权和,在前面提到的二进制转换为十进制的内容里,我们知道了二进制如何转换为十进制:
$1 1 0 1_{2} = 1 * 2^{3} + 1 * 2^{2} + 0 * 2^{1} + 1 * 2^{0} = 8 + 4 + 0 + 1 = 1 3_{1 0}$
其他所有任意进制都可以用位权求和来将它们转换成十进制。 例题:
(1)将八进制数转成十进制
$1 7 5_{8} = 1 * 8^{2} + 7 * 8^{1} + 5 * 8 ^{0} = 1 * 6 4 + 7 * 8 + 5 * 1 = 6 4 + 5 6 + 5 = 1 2 5_{1 0}.$
(2)将十六进制数A5E转成十进制 $A 5 E_{1 6} = 1 0 * 1 6^{2} + 5 * 1 6^{1} + 1 4 * 1 6 ^{0} = 1 0 * 2 5 6 + 5 * 1 6 + 1 4 * 1 = 2 5 6 0 + 8 0 + 1 4 = 2 6 5 4_{1 0}.$
(3)将五进制数转成十进制 整数部分:
小数部分:
2、十进制数转换成任意进制数
十进制数转化为任意进制数是类似十进制数转成二进制数的。 假设要转化为 进制,那么短除倒序取余即可。
需要注意的是,如果 ,那么余数也可能大于等于,需要将大于等于的数转化为对应的字母。 例题:
(1)将用进制数表示 (1)
(2)
(3)
(2) 用 进制数表示
(1)
(2)
(六)非十进制数的加减法
我们回顾一下十进制数的加减法的原理。
加法:两数之和满10则进位。 例如,,因为 ,所以当前位(个位)保留,进位到下一位(十位)。
减法:对应位置的被减数不够减去减数时,从下一位借位,并在当前数字中加上。
例如,不够减,跟前一位借一位变成,于是就是, 前一位减去变成, , 故差为。
这个十进制加减法规则可以运用到任何非十进制数的加减法中。
根据对应的进制的基数,进行进位和减位。
譬如二进制加法,满进,八进制加法,满进,十六进制加法满进。
减法也类似,
二进制减法退当做,八进制减法退当做,十六进制减法退当做。
我们来看几个例子:
1、二进制加减法 (1)
(2)
(3)
(4)
2、八进制加减法
(1)
(2)
3、十六进制加减法
(1)
(2)
(3)
非十进制的加减法都可以用十进制的竖式来推演计算过程。
2.1.2.原码、反码、补码系统
计算机中的有符号数有三种表示方法,即原码、反码和补码。 三种表示方法均有符号位和数值位两部分,符号位用表示“正”,用表示“负”,
而数值位,三种表示方法各不相同。
在计算机系统中,数值一律用补码来表示和存储。
原码、反码、补码
原码:最高位表示符号位 (0表示正;1表示负),其它数字位代表数值本身的绝对值的数字二进制表示方式。
反码:如果是正数,则表示方法和原码一样;
如果是负数,符号位不变,其余各位依次取反。
补码:如果是正数,则表示方法和原码一样;
如果是负数,则将数字的反码加上1。
正数和0的原码、反码、补码相同。
例题:
(1)写出和 的原码、反码、补码(以一个字节来思考)
数值 | 原码 | 反码 | 补码 |
---|---|---|---|
25 | 00011001 | ||
-25 | 10011001 | 11100110 | 11100111 |
(2)写出计算机中以10011111 (以一个字节为例)存储的二进制数对应的十进制是多少。 解题过程:
第一步:最高位是符号位为1,说明该数是负数。
第二步: 将补码转为反码 (补码-1) , 10011110 (反码)
第三步:将反码转为原码(符号位不变,其余位取反),
(原码)
第四步:最前面1代表负数,后面的十进制数是:。
∴ 答案是。