数据的表示
1.各种数制
1-1 二进制
特点:逢二进一,有两个字符(0和1)
符号表示:字母B或下标2
2的10次方 = 1024 它需要用11位二进制位来表示(包含符号位)
1-2 八进制
特点:逢八进一,有八个字符(0 ~ 7)
符号表示:字母O或 下标8
1-3 十进制
特点:逢十进一,有十个字符(0 ~ 9)
符号表示:字母D或 下标10
1-4 十六进制
特点:逢十六进一,有十六个字符(0 ~ 9,A ~ F)
符号表示:字母H 或下标16
十六进制按权展开:(5C)H => ((5*16)+12)D
1-5 R进制
特点: 一种可变的进制,逢R进一
2.数制间转换
2-1 R进制转十进制
定义:对于任何一个R进制数,它对应的十进制数值等于该数每一位数字的数码乘以该位的权数。
权数:由 R的K次方 表示。
- 如果该数值位在小数点左边,K的值为
从小数点开始到该位的位数 -1
(1 = 1 x 10(1-1)) - 如果该数值位在小数点右边,K的值为负数,其绝对值是
从小数点开始到该位的位数
(0.1 = 1 x 10-1)
例如:
十进制数 1234.56 其数值计算可拆分为:
1234.56 = 1 x 103 + 2 x 102 + 3 x 101 + 4 x 100 + 5 x 10-1 + 6 x 10-2
.
二进制数 111 转换为十进制数过程为:
111(B) = 1 x 22 + 1 x 21 + 1 x 20 = 7(D)
2-2 十进制整数转R进制整数
除以R取余数法:用十进制整数除以R,记录余数,并用得到的商继续除以R,直到商为0为止。将每一步记录的余数倒序输出,即为十进制整数对应的R进制数。
例:
(94)10 转为 二进制:
94/2 = 47 余 0
47/2 = 23 余 1
23/2 = 11 余 1
11/2 = 5 余 1
5/2 = 2 余 1
2/2 = 1 余 0
1/2 余 1 (由于1/2商为0,所以为最后一步)
把余数从下往上倒序输出即为转换后的二进制整数
(94)10 = (1011110)2
2-3 十进制小数转R进制小数
乘R取整法:把十进制小数乘R,记录积的整数数值,并用小数部分继续乘R,直到积为1(不包含小数)为止。将每一步记录的整数部分正序输出,即为十进制小数对应的R进制小数。
此方法中的十进制小数指 个位及个位左边的位都为0 的小数,如果不为0,则小数点左边按整数方式计算,小数点右边按小数方式计算。
例:
(0.43)10 转为二进制小数:(假设要求小数点后取5位)
0.43 x 2 = 0.86 整数位为 0
0.86 x 2 = 1.72 整数位为 1
0.72 x 2 = 1.44 整数位为 1
0.44 x 2 = 0.88 整数位为 0
0.88 x 2 = 1.76 整数位为 1
…
从上往下正序输出即为转换后的二进制小数
(0.43)10 = (0.01101)2
2-4 二进制转八进制
每三位聚合法:从小数点开始,往前(或往后)每三位转换成对应的八进制数即可,不够三位的补0。
例:
(1 011.111 11)B = (13.76)O
2-5 二进制转十六进制
每四位聚合法:从小数点开始,往前(或往后)每四位转换为对应的十六进制数即可,不够四位的补0。
例:
(10 1011.1111 1)B = (2B.F8)H
3.数据的表示
原码、反码、补码、移码 都是二进制编码,以二进制为基础
3-1 原码
原码 = 1位符号位(正数为0,负数为1) + 真值(实际数值的绝对值)
例1:整数原码
(+0110)B 的原码为 (00000110)原
(-0110)B 的原码为 (10000110)原
例2:小数原码(取小数点右边的数值)
(+0.1011)B 的原码为 (01011)原
(-0.1011)B 的原码为 (11011)原
3-2 反码
正数的反码:与原码相同
负数的反码:原码的符号位不变,所有数值位取反
例1:整数反码
(+0110)B 的反码为 (00110)反
(-0110)B 的反码为 (11001)反
例2:小数反码(取小数点右边的数值)
(+0.1011)B 的反码为 (01011)反
(-0.1011)B 的反码为 (10100)反
3-3 补码
正数的补码:与反码(原码)相同
负数的补码:反码加1
例1:整数补码
(+0110)B 的补码为 (00110)补
(-0110)B 的补码为 (11010)补
例2:小数补码(取小数点右边的数值)
(+0.1011)B 的补码为 (01011)补
(-0.1011)B 的补码为 (10101)补
3-4 移码
补码的符号位取反
例:
(+1011)B 补码为 (01011)补 移码为(11011)移
(-1011)B 补码为(10101)补 移码为(00101)移
1.在补码和移码中,0有唯一的编码:
补码中 +0 和 -0 均为 0000 0000
移码中 +0 和 -0 均为 1000 0000
2.在计算机中采用补码进行加减运算,其符号位和数值位一样参与运算,无须做特殊处理
3-5 数据的表示范围
n 为二进制码的总长度(包括符号位和数值位)
码制 | 定点整数 | 定点小数 |
---|---|---|
原码 | -(2n-1 -1) ~ +(2n-1 -1) | -(1-2-(n-1) ) ~ +(1-2-(n-1) ) |
反码 | -(2n-1 -1) ~ +(2n-1 -1) | -(1-2-(n-1) ) ~ +(1-2-(n-1) ) |
补码 | -2n-1 ~ +(2n-1 -1) | -1 ~ +(1-2-(n-1)) |
移码 | -2n-1 ~ +(2n-1 -1) | -1 ~ +(1-2-(n-1)) |
当 n = 8 时:
- 定点整数补码中:-128的补码由人为规定: 1000 0000
- 定点小数补码中:-1 的补码由人为规定:1000 0000
(因为补码、移码中,数值0有唯一的表示方式,所以多出的一个空位就用来扩展最小值)
3-6 二进制浮点数
浮点数表示: [数符+-] [尾数] [阶符+-] [阶码]
(例:0.1011 x 2010)
特点:
- 尾数的位数决定数的有效精度,位数越多精度越高
- 阶码的位数决定数的表示范围,位数越多范围越大
浮点数运算过程:
对阶 > 尾数计算 > 结果格式化
计算要点:
- 对阶时,小数向大数看齐(阶码低的向阶码高的靠拢,尾数右移)
- 对阶是通过较小数的尾数右移实现的
4.其他编码
2.5 浮点数编码
浮点数表示形式为:N = 2E * F (其中 E为阶码,F为尾数)
浮点数的二进制编码组成为:阶符(阶码的正负) + 阶码E的移码(纯整数) + 数符(数的正负) + 尾数F的补码(纯小数)
例:???
求 123D 的浮点数二进制表示:
- 先转为二进制:1111011B
- 分离尾数(纯小数)和阶码:0.1111011 x 27
- 算阶码的移码:7D的二进制移码为10111
- 算尾数的补码:0.1111011B 补码为 0.1111011
- 合成浮点数编码: 0 10111 0 1111011000
2.6 IEEE754编码(单精度)
IEEE754二进制编码组成为:符号位(1位) + 阶码的移码(8位) + 尾数的原码(23位)
总长32位,约定小数点左边隐含一位1,所以尾数的有效位为24位,即尾数的格式为 1.xxxxxxx…
特殊规定:在IEEE754标准中,单精度浮点数的移码并不是补码符号位取反,而是补码 + 127D例:
将 176.0625D表示为符合IEEE754标准的单精度浮点数:
- 转二进制:176.0625D = 10110000.0001B
- 规格化处理:10110000.0001B = 1.01100000001 x 27
- 去掉小数点左边约定的1,并扩展成23位尾数:01100000001000000000000
- 求阶码的移码:7D 的移码为 10000110B
- 合成单精度IEEE754编码:0 10000110 01100000001000000000000
2.7 BCD码(跳过)
2.8 ASCII 编码
美国标准信息交换码,采用8位二进制编码(最高一位固定为0,有效位7位)
低四位用做行编码,高三位用做列编码
2.8 汉字编码
1.区位码
将国标码方案中的字符分区,然后用16进制数值来表示该字符的区位。
例:1303H 13为高位,03为低位
2.国标码
GB2312-80 长度为两个字节,每个字节的最高位都为0,因此可以表示的汉字数为16384个。
将区位码的低位和高位分别加十进制数32(即20H),便能得到国标码。
3.机内码
是计算机内部存储、处理、传输汉字的代码。无论使用哪儿种编码,进入计算机后都被转换为机内码。
将国标码高位和低位分别加128D(即80H)得到机内码。
3. 算数运算
3.1 二进制加法
例:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10(进位)
101 + 11 = 1000
3.2 二进制减法
0 - 0 = 0
1 - 0 = 1
0 - 1 = 01(借位)
1 - 1 = 0
101 - 11 = 10