文章82
标签28
分类8

数据的表示

数据的表示

进制之间的转换

其实十进制就是我们日常生活中使用的阿拉伯数字,但是计算机只认识 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.

  • 阶码:指数的数值。

  • 数符:尾数的正负符号。

  • 尾数:尾数的大小。