数据的表示
进制之间的转换
其实十进制就是我们日常生活中使用的阿拉伯数字,但是计算机只认识 0 和 1,所以我们都要进行进制转换。
R进制转十进制可以用按权展开法
比如 29481 可以根据按权展开法表示成:
29482 = 2*10^4 + 9*10^3 + 4*10^2 + 8*10^1 + 1*10^1
十进制转R进制可以用短除法
比如将94转为二进制根据短除法表示成为:
2 | 94……余 0
2 | 47……余 1
2 | 23……余 1
2 | 11……余 1
2 | 5 ……余 1
2 | 2 ……余 0
2 | 1 ……余 1
所以最后得到结果倒序往上排列就是: 1011110
二进制转八进制
比如把刚刚上面的二进制数 1011110 转为八进制:
我们先从后面三三分组 001,011,110 ==位数不够的用零代替==
001,011,110 = (1*2^0) , (0*2^2+1*2^1+1*2^0) , (1*2^2+1*2^1+0*2^0)
= 1,3,6
所以 1011110 转换为八进制的结果就是 136
二进制转十六进制
我们还是刚刚那个数字 1011110 转为十六进制:
我们现在需要四四分组 0101,1110 还是一样的,位数不够用零代替
0101,1110 = (0*2^3+1*2^2+0*2^1+1*2^0),(1*2^3+1*2^2+1*2^1+0*2^0) = 5,14
这里结果出现了两位数,这是不允许的,所以我们用字母代替
从 10 ~ 15 分别用大写字母表示:10 = A ,11 = B ,12 = C ,13 = D ,14 = E ,15 = F
所以转 16 进制的结果是: 5E
码制
码制之间的表示
码制包括四种:
原码,反码,补码,移码.
第一位是符号位:0 代表正数,1 代表负数.
剩下的七位代表数值
| - | 1 | -1 | 1-1 |
|---|---|---|---|
| 原码 | 0000 0001 | 1000 0001 | 1000 0010❌ |
| 反码 | 0000 0001 | 1111 1110 | 1111 1111❌ |
| 补码 | 0000 0001 | 1111 1111 | 0000 0000✅ |
| 移码 | 1000 0001 | 0111 1111 | 1000 0000❌ |
正数
- 原码,反码,补码是相同的。
- 移码是在补码的基础上符号位取反。
负数
- 原码第一位是 1。
- 反码是在原码的基础上除符号位以外全部取反。
- 补码是在反码的基础上再加 1。
- 移码是在补码的基础上符号位取反。
上面的 1-1 其实是 1+(-1) 结果是:0。
但是用原码和反码以及移码表示的结果都是错误的结果,只有补码的结果是正确的。
所以在计算当中都是用补码来进行加减运算的。
码制的范围
| 码制 | 定点整数 | 定点小数 |
|---|---|---|
| 原码 | -(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 = 尾数*基数指数
运算过程
对阶 > 尾数计算 > 结果格式化
特点
一般尾数用补码,阶码用移码。
阶码的位数决定数的表示范围,位数越多范围越大。
尾数的位数决定数的有效精度,位数越多精度越高。
对阶时,小数向大数看齐。
对阶是通过较小数的尾数右移实现的。
比如
3.14*10^3 + 1.2*10^5
按照上面的运算过程,先对阶
0.0314*10^5 + 1.2*10^5
尾数的计算就是将尾数相加,然后乘上基数
(0.0314+1.2) * 10^5 = 1.2414*10^5
最后有一步是结果格式化,那是相对于二进制的数而言的,我们知道有这一步的存在就可以了。
在实际考试中是不会真的要求我们去计算的,主要需要掌握理论知识。
| 阶符 | 阶码 | 数符 | 尾数 |
|---|---|---|---|
| 0 | 5 | 0 | 0.0314 |
| 0 | 5 | 0 | 1.2 |
阶符:就是阶码的符号,像这里阶码就是 10^5 ,因为指数 5是正数那么阶符就是 0,如果是-5那么阶符就是 1.
阶码:指数的数值。
数符:尾数的正负符号。
尾数:尾数的大小。