2i進制

维基百科,自由的百科全书
跳转至: 导航搜索

2i进制,是由高德纳于1995年提出来的,当时用作高中科学精英研究用。它是一种以2i基数的非标准进位制。这种进制以0、1、2、3为基本数码[1],能够独一无二的表示全体复数

转换2i进制到十进制[编辑]

k (2i)k
-5 −1/32i
-4 1/16
-3 1/8i
-2 −1/4
-1 −1/2i
0 1
1 2i
2 −4
3 −8i
4 16
5 32i
6 −64
7 −128i
8 256
Powers of 2i

将2i进制转换为十进制可以用标准公式. 这个公式是


b进制数\ldots d_3d_2d_1d_0 的十进制数为

\cdots + d_3\cdot b^3+d_2\cdot b^2+d_1\cdot b+d_0


2i进制中, b = 2i.

示例[编辑]

1101_{2i} 转换为十进制, 可按照上述公式填入相应数字:

1\cdot(2i)^3 + 1\cdot(2i)^2 + 0\cdot(2i)^1 + 1\cdot(2i)^0 = -8i - 4 + 0 + 1 = -3 - 8i

再比如: 1030003_{2i} 十进制是

1\cdot(2i)^6 + 3\cdot(2i)^4 + 3\cdot(2i)^0 = -64 + 3\cdot 16 + 3 = -13

十进制转换到2i进制[编辑]

也能将十进制数转换为2i进制. 每个复数(形如a+bi) 都有个2i进制形式. 大多十进制数都只有1个形式,但像1这样的数在十进制中有两种形式1.0 = 0.9... , 相对应的 1/5有两种2i进制形式:1.(0300)…2i = 0.(0003)…2i.

要转换十进制数, 先将实部虚部分别转换为2i进制数,然后加到一起即可。 比如, –1+4i 等于–1 加上 4i, -1的2i进制数是103, 4i的2i进制数是20,因此 –1+4i = 1232i.

转换虚部时,可以先乘以2i, 得到一个实数;然后将这个实数转换为2i进制,然后右移一位即可 (等效于除以 2i). 例如, 虚部是 6i,先将6i 乘以2i 得到 –12, 化为2i进制是3002i, 然后右移一位, 得到: 6i = 302i.

转换实数,可以用方程组来求解。

示例:实数[编辑]

我们来求解7的2i进制数。我们很难知道这个2i进制数有多长,所以我们先假设一个比较长的数. 我们先选六位试试,如果不够,我们再延长。 我们写出公式,然后分组:


\begin{align}
7_{10}& = d_{0}+d_{1}\cdot b+d_{2}\cdot b^{2}+d_{3}\cdot b^{3}+d_{4}\cdot b^{4}+d_{5}\cdot b^{5} \\
& = d_{0}+2id_{1}-4d_{2}-8id_{3}+16d_{4}+32id_{5} \\
& = d_{0}-4d_{2}+16d_{4}+i(2d_{1}-8d_{3}+32d_{5}) \\
\end{align}

7是实数, 因此d1, d3d5 是0。 剩下就是系数d0, d2d4。 因为 d0 − 4 d2 + 16 d4 = 7 并且他们只能是 0, 1, 2 or 3 。可能的结果是: d0 = 3, d2 = 3 , d4 = 1. 这样就找到了710的2i进制数.

\begin{align} 7_{10} = 010303_{2i} = 10303_{2i}.\end{align}

示例: 虚数[编辑]

找一个纯虚数的2i进制数,可以模拟实数的方法. 例如6i, 也可以用公式。实部全为零,虚部化为6. 6i 很容易看出 d1 = 3 其他各位都是0。6i就是:

\begin{align}6i_{10} = 30_{2i}\end{align}

小数点“.”[编辑]

十进制中小数点用来区分整数部分和小数部分。2i进制中小数点一样可以用,比如...d_{5}d_{4}d_{3}d_{2}d_{1}d_{0} . d_{-1}d_{-2}d_{-3}... 中,小数点用来分割b的正数和負数幂。带小数点时,公式是:

d_5 b^5 + d_4 b^4 + d_3 b^3 + d_2 b^2 + d_1 b + d_0 + d_{-1} b^{-1} + d_{-2} b^{-2} + d_{-3} b^{-3}


32id_{5}+16d_{4}-8id_{3}-4d_{2}+2id_{1}+d_{0}+\frac{1}{2i}d_{-1}+\frac{1}{-4}d_{-2}+\frac{1}{-8i}d_{-3}

=32id_{5}+16d_{4}-8id_{3}-4d_{2}+2id_{1}+d_{0}-\frac{i}{2}d_{-1}-\frac{1}{4}d_{-2}+\frac{i}{8}d_{-3}

示例[编辑]

將i轉換為2i進制,没有小数点的话,可能没办法做到。因此:


\begin{align}i & = 32id_{5}+16d_{4}-8id_{3}-4d_{2}+2id_{1}+d_{0}+\frac{1}{2i}d_{-1}+\frac{1}{-4}d_{-2}+\frac{1}{-8i}d_{-3}\\
& = i(32d_{5}-8d_{3}+2d_{1}-\frac{1}{2}d_{-1}+\frac{1}{8}d_{-3})+16d_{4}-4d_{2}+d_{0}-\frac{1}{4}d_{-2}\\
\end{align}

实部为0; d4 = d2 = d0 = d-2 = 0. 虚部, 当 d5 = d3 = d -3 = 0 并且 当 d1=1d-1=2 时结果正确。所以

\begin{align}i = 10.2_{2i}\end{align}.

加减法[编辑]

2i进制也可以做加减法. 首先要记住以下规则:

  1. 数字超过3时, 4 "进" −1 到左边第二位。
  2. 数字小于0时, 4"进" +1 到左边第二位。

简单的说: "加四进一、减四借一". 和一般竖式加法不同的是,要借/进到左边第二位。

示例:加法[编辑]

  1 - 2i                1031             3 - 4i                 1023
  1 - 2i                1031             1 - 8i                 1001
  ------- +     <=>     ----- +          ------- +      <=>     ----- +
  2 - 4i                1022             4 - 12i               12320

第一个例子,先是1+1=2。然后是3+3=6,6比3大,我们得减4借1。接着是0+0=0。然后是1+1=2,在减去借的1。得1。

第二个例子,先是3+1=4; 4 比3大,我们得减4借1。然后是2+0=2。 接着是0+0=0,再减去借位1,得-1,小于0,我们得加四进一。 然后是1+1=2; 最后是进位1。我们得到结果12320_{2i}.

示例:减法[编辑]

减法和加法类似。下面是例子:

        - 2 - 8i                       1102
          1 - 6i                       1011  
          ------- -         <=>        ----- -
        - 3 - 2i                       1131

这个例子中,先是2-1 = 1。 然后是0-1=-1,小于0,加4进1得3;接着是1-0=1。然后是1-1=0,加上进位得1。 结果就是 1131_{2i}.

乘法[编辑]

乘法也要用到上面两点。先逐位相乘,然后叠加。比如:

             11201
             20121  x
             --------
             11201      <--- 1 x 11201
            12002       <--- 2 x 11201
           11201        <--- 1 x 11201
          00000         <--- 0 x 11201
         12002      +   <--- 2 x 11201
         ------------
         120231321

也就是 (9-8i)\cdot(29+4i) = 293-196i.

查表转换[编辑]

下面是一个常用的复数对照表。我们可以用叠加的方法来转换复数

十进制 2i进制
1  1
2  2
3  3
4  10300
5  10301
6  10302
7  10303
8  10200
9  10201
10  10202
11  10203
12  10100
13  10101
14  10102
15  10103
16  10000
十进制 2i进制
−1  103
−2  102
−3  101
−4  100
−5  203
−6  202
−7  201
−8  200
−9  303
−10  302
−11  301
−12  300
−13  1030003
−14  1030002
−15  1030001
−16  1030000
十进制 2i进制
1i 10.2
2i 10.0
3i 20.2
4i 20.0
5i 30.2
6i 30.0
7i 103000.2
8i 103000.0
9i 103010.2
10i 103010.0
11i 103020.2
12i 103020.0
13i 103030.2
14i 103030.0
15i 102000.2
16i 102000.0
十进制 2i进制
−1i 0.2
−2i 1030.0
−3i 1030.2
−4i 1020.0
−5i 1020.2
−6i 1010.0
−7i 1010.2
−8i 1000.0
−9i 1000.2
−10i 2030.0
−11i 2030.2
−12i 2020.0
−13i 2020.2
−14i 2010.0
−15i 2010.2
−16i 2000.0

示例[编辑]

5 = 16 + (3\cdot-4) + 1 = 10301_{2i}
i = 2i + 2\left(-\frac{1}{2}i\right) = 10.2_{2i}
7 \frac{3}{4} - 7 \frac{1}{2}i = 1(16) + 1(-8i) + 2(-4) + 1(2i) + 3\left(-\frac{1}{2}i\right) + 1\left(-\frac{1}{4}\right) = 11210.31_{2i}

参见[编辑]

参考资料[编辑]

  • D. Knuth. The Art of Computer Programming. Volume 2, 3rd Edition. Addison-Wesley. pp. 205, "Positional Number Systems"
    • ^ Donald Knuth. An imaginary number system. Communications of the ACM. April 1960, 3 (4).