2i進制

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

转换2i进制到十进制

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
2i的冪

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

b {\displaystyle b} 进制数 d 3 d 2 d 1 d 0 {\displaystyle \ldots d_{3}d_{2}d_{1}d_{0}} 十进制数为

+ d 3 b 3 + d 2 b 2 + d 1 b + d 0 {\displaystyle \cdots +d_{3}\cdot b^{3}+d_{2}\cdot b^{2}+d_{1}\cdot b+d_{0}}

2i进制中, b = 2 i {\displaystyle b=2i}

示例

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

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

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

1 ( 2 i ) 6 + 3 ( 2 i ) 4 + 3 ( 2 i ) 0 = 64 + 3 16 + 3 = 13 {\displaystyle 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.03002i = 0.00032i

要转换十进制数,先将实部和虚部分别转换为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进制数有多长,所以我们先假设一个比较长的数。 我们先选六位试试,如果不够,我们再延长。 我们写出公式,然后分组:

7 10 = d 0 + d 1 b + d 2 b 2 + d 3 b 3 + d 4 b 4 + d 5 b 5 = d 0 + 2 i d 1 4 d 2 8 i d 3 + 16 d 4 + 32 i d 5 = d 0 4 d 2 + 16 d 4 + i ( 2 d 1 8 d 3 + 32 d 5 ) {\displaystyle {\begin{aligned}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{aligned}}}

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

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

示例: 虚数

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

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

其他的轉換方式

對實數而言,2i进制表示法實際上與負四进制相同。要將複數x+iy轉換成2i进制可以透過將xy/2分別轉換為負四进制再將之交錯合併來完成轉換成2i进制的工作。如果xy都是有限的二进制小數,則可以使用連續的带余除法來將十进制數轉換成2i进制:

例如:35+23i=121003.22i

                35                                 23i/2i=11.5    11=12−0.5
            35÷(−4)=−8, 餘 3                12/(−4)=−3, 餘 0               (−0.5)×(−4)=2
            −8÷(−4)= 2, 餘 0                −3/(−4)= 1, 餘 1
             2÷(−4)= 0, 餘 2                 1/(−4)= 0, 餘 1
               20003                    +     101000                         +  0.2 = 121003.2
                         32i+16×2−8i−4×0+2i×0+1×3−2×i/2=35+23i

小数点“.”

十进制中小数点用来区分整数部分和小数部分。2i进制中小数点一样可以用,比如 . . . d 5 d 4 d 3 d 2 d 1 d 0 . d 1 d 2 d 3 . . . {\displaystyle ...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 {\displaystyle 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}}

32 i d 5 + 16 d 4 8 i d 3 4 d 2 + 2 i d 1 + d 0 + 1 2 i d 1 + 1 4 d 2 + 1 8 i d 3 {\displaystyle 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}}

= 32 i d 5 + 16 d 4 8 i d 3 4 d 2 + 2 i d 1 + d 0 i 2 d 1 1 4 d 2 + i 8 d 3 {\displaystyle =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進制,没有小数点的话,可能没办法做到。因此:

i = 32 i d 5 + 16 d 4 8 i d 3 4 d 2 + 2 i d 1 + d 0 + 1 2 i d 1 + 1 4 d 2 + 1 8 i d 3 = i ( 32 d 5 8 d 3 + 2 d 1 1 2 d 1 + 1 8 d 3 ) + 16 d 4 4 d 2 + d 0 1 4 d 2 {\displaystyle {\begin{aligned}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{aligned}}}

因為实部为0,故 d4 = d2 = d0 = d-2 = 0
接著考慮虚部部分,当 d5 = d3 = d -3 = 0 并且 当 d1=1d-1=2 时结果正确。所以

i = 10.2 2 i {\displaystyle {\begin{aligned}i=10.2_{2i}\end{aligned}}} .

示例(分數)

1 3 {\displaystyle {\frac {1}{3}}} 轉換為2i進制,其結果為-0.0203

加减法

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 2 i {\displaystyle 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 2 i {\displaystyle 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 8 i ) ( 29 + 4 i ) = 293 196 i {\displaystyle (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 4 ) + 1 = 10301 2 i {\displaystyle 5=16+(3\cdot -4)+1=10301_{2i}}
i = 2 i + 2 ( 1 2 i ) = 10.2 2 i {\displaystyle i=2i+2\left(-{\frac {1}{2}}i\right)=10.2_{2i}}
7 3 4 7 1 2 i = 1 ( 16 ) + 1 ( 8 i ) + 2 ( 4 ) + 1 ( 2 i ) + 3 ( 1 2 i ) + 1 ( 1 4 ) = 11210.31 2 i {\displaystyle 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}}

参见

  • 四進制
  • 十六進制
  • 複進制英语Complex base systems
  • 负进制英语Negative base

参考资料

  • 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). 
    基本进位制
    平衡进位制
    广义的进制系统
    相關條目
    著作
    • 计算机程序设计艺术
    • 歌曲的計算複雜度英语The Complexity of Songs
    • 電腦與排版英语Computers and Typesetting
    • 具體數學
    • 超現實數英语Surreal Numbers (book)
    • 計算機科學家很少談論的事情英语Things a Computer Scientist Rarely Talks About
    • 論文選集英语Selected papers series of Knuth
    软件
    • TeX
    • METAFONT
    • MIXAL
      • MIX英语MIX (abstract machine)
      • MMIX英语MMIX
    字型
    文学编程
    • WEB
    • CWEB英语CWEB
    算法
    • X算法
    • 高德納-本迪克斯補全算法英语Knuth–Bendix completion algorithm
    • KMP算法
    • 高德納洗牌算法英语Fisher–Yates shuffle
    • RSK 對應英语Robinson–Schensted–Knuth correspondence
    • TPK算法英语TPK algorithm
    • 概念化戴克斯特拉算法
    • Knuth's Simpath algorithm英语Knuth's Simpath algorithm
    相關