Loading

进制学习笔记

进制与编码

一.常用进制的概念

进制 基数 基数个数 权值 进位规律
10进制 0,1,2,3,4,5,6,7,8,9 10个 \(10^i\) 逢十进一
2进制 0,1 2个 \(2^i\) 逢二进一
8进制 0,1,2,3,4,5,6,7 8个 \(8^i\) 逢八进一
16进制 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 16个 \(16^i\) 逢十六进一

二.不同进制之间的转化

  1. 2->10

    例如\((1011.01)_2=(1\times2^3+0\times2^2+1\times2^1+1\times2^0+0\times2^{-1}+1\times2^{-2})_{10}\)

    \(=(8+0+2+1+0+0.25)_{10}\)

    \(=(11.25)_{10}\)

  2. 10->2

例如\((89)_{10}=(1011001)_2\)

计算过程:

\(89\div2=44......1\)

\(44\div2=22......0\)

\(22\div2=11......0\)

\(11\div2=5........1\)

\(5\div2=2..........1\)

\(2\div2=1..........0\)

\(1\div2=0..........1\)

从下往上取余数的\((89)_{10}=(1011001)_2\)

  1. 2->8 and 8->2 and 2->16 and 16 ->2

    由于这几个进制有很大的关系,所以我们可以用更快的方法来转化。

    • \((37.416)_8=(11111.10000111)_2\)

      将这几个数字分别转换为二进制

      \((3)_8=(011)_2\)

      \((7)_8=(111)_2\)

      \((4)_8=(100)_2\)

      \((1)_8=(001)_2\)

      \((6)_8=(110)_2\)

      将它们拼起来就好了。

      所以\((37.416)_8=(011111.1000001110)_2=(11111.10000111)_2\)

    • \((10110.011)_2=(26.14)_8\)

      把这个数以小数点为起点三位三位的分段,不够分的补上0,我们可以得到

      010 -> \((2)_8\)

      110 ->\((6)_8\)

      001->\((1)_8\)

      100->\((4)_8\)

      所以\((10110.011)_2=(26.14)_8\)

三.二进制的源码、反码、补码

  1. 原码就是前面一位符号位(正数为0,负数为1)后面跟着这个数的绝对值的二进制。

    例如\((-15)_{10}=[(1111)_2]_原\)

    所以\((-15)_{10}\)的源码就是\((11111)_2\)

  2. 反码就是原码除了符号位以外,将它二进制中的每一位都取反得到的二进制码。

    例如\([(11111)_2]_原=[(10000)_2]_反\)

  3. 补码分两种情况,如果原数是正数的话,它的补码就是他的原码。如果原数是负数的话,他的补码就是它反码加一(如果高过最高位了就让它溢出)。

    例如\([(10000)_2]_反=[(10001)_2]_补\)

    采用补码表示法就可以避免\(+0\)\(-0\)的不同。

四.没啦

posted @ 2020-11-19 21:00  zhangwenxuan  阅读(265)  评论(0)    收藏  举报