一、计算机中的数据

各种进制

不同进制本质上没有区别,都可以表示任意数字。任务的给不同进制规定了一些"符号":

  • 二进制:0~1
  • 八进制:0~7
  • 十进制:0~9
  • 十六进制:0~9,A~F

十进制

十进制的表示方式为0,1,2,3,4,5,6,7,8,9
低位和高位的关系:逢10进1
十进制数中每一位都是10的整数次幂
表示的符号:D
例:266.11D = 2*10^2+6*10^1+6*10^0+1*10^(-1)+1*10^(-2)

二进制

二进制中只有0和1
低位和高位的关系:逢2进1
二进制数中每一位都是2的整数次幂
表示符号:B
例:1010.11B = 1*2^3+0*2^2+1*2^1+0*2^0+1*2^(-1)+1*2^(-2)

八进制

八进制的表示方式为:0,1,2,3,4,5,6,7
低位与高位的关系:逢8进1
每一位都是8的整数次幂
表示符号:O
例:389.2 O = 3*8^2+8*8^1+9*8^0+2*8^(-1)

十六进制

十六进制的表示方式:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
低位和高位的关系:逢8进1。
每一位都是16的整数次幂
表示符号:H
例:8D2.7 H = 8*16^2+13*16^1+2*16^0+7*16^(-1)

进制之间的转换

了解完各种进制后,我们接下来就要了解一下各种进制之间的转换

十进制转为二进制

将十进制转换为二进制,使用的方法是逆序取余法。
逆序取余法:我们使用10进制数5678进行来做示例

  1. 用5678除以10得到商:567,余:8
  2. 将上一次得到的商除以10得到商:56,余:7
  3. 将上一次得到的商除以10得到商:5,余:6
  4. 将上一次得到的商除以10得到商:0,余:5

我们将得到的余数逆序来看就是5678,由于每一位都是小于10的数,所以我们每次除10 都能得到最低为上的数字作为余数。
用以上的方法转二进制是这样的:我们将10进制数每次都除以2,得到余数,我们将余数逆序来看就是2进制数,接下来我们就来试试

    2|185                    余数
     2|92                    1
      2|46                   0
       2|23                  0
        2|11                 1
         2|5                 1
          2|2                1
           2|1               0
            2|0              1

我们逆序取到余数,得到的数为101101001,这个就是十进制数185的二进制表示,还是有点不容易的。
当我们遇到十进制转二进制带有小数的时候,我需要对小数进行正序取整的方法。
正序取整
例如:1.125

    0.125*2 = 0.25         取整数部分0
    0.25*2 = 0.5        取整数部分0
    0.5*2 = 1            取整数部分1

最终我们得到二进制的结果是1.001

八进制转十六进制

我们刚才在十进制转二进制的时候,比较麻烦,需要对2一直取余,但是在八进制转二进制和十六进制转二进制的时候非常简单,我们八进制和十六进制互转的时候,只要知道二进制就异常简单了。
首先我们试以下二进制转八进制

    1    110        001        111.001        1    二进制
    1     6          1          7 . 1         4    八进制

二进制转进制的规则是:
整数部分从低位到高位每3位来表示八进制中的一位,不足三位的用0来补,比如我们这二进制数最高位是1,补位后就是001
小数部分从高位到低位每3为来表示八进制中的一位,不足三位的用0来补,就像上面小数后面的最后一位1,由于后面不足三位,所以我们在其后面补充三位变为100,也就是4
最终我们可以得到二进制数1110001111.0011对应的八进制数是1617.14

接着我们来看看二进制转十六进制

    1    1110    1111    0010        二进制
    1      E       F       2         十六进制

我们不难发现二进制转十六进制和八进制转二进制相似,不过转换的位数由3位变成了4为,看完了八进制和十六进制对二进制的转换后,是不是发现我们可以通过转换其为二进制,来进行八进制和十六进制的转换!
通过上面的介绍后,可以发现:

  • 八进制:可以用一个八进制来表示三个二进制位
  • 十六进制:可以用一个十六进制来表示四个二进制位
  • 我们使用十进制来表示二进制的时候,虽然我们比较熟悉也可以缩短位数,但是二进制和十进制之间的转换比较麻烦,这时候八进制和十六进制的优势就显示出来了,他们不但可以缩短二进制的位数,还可以简单和二进制进制转换,这就是为什么有八进制和十六进制的原因。

原码、反码、补码

这里我们简单介绍一下原码、反码、补码
正数:正数的原发、反码、补码都是一样的
负数:

  • 原码:最高位不变,后面数据和其绝对值相同
  • 反码:将原码除最高位,其余按位取反
  • 补码:反码加一

例如:

    1 111 1010    -7A
    1 000 0101        (反码)
    1 000 0110        (补码)

注:为了表示正数和负数,最高为是符号为,0为正数,1为负数

其他一些概念

位是计算机中最小的单位,他表示一个二进制数,0或者1,英文是bit。
字长是CPU的主要技术指标之一,指的是CPU一次最大可能并行处理的二进制数。
我们平常可能接触到byte这个概念,他与位不同的是:

    byte表示字节,一个字节是8位,
    word是两个字节,也就是16位,
    dword是四个字节,也就是32位。
最后修改:2020 年 08 月 26 日
如果觉得我的文章对你有用,请随意赞赏