2i進制

2i进制，是由高德纳于1995年提出来的，当时用作高中科学精英研究用。它是一种以2i为基数的非标准进位制。这种进制以0、1、2、3为基本數碼，能够独一无二的表示全体复数。 将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进制。 每个复数（形如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是实数，因此d1、d3 和 d5 是0。 剩下就是系数d0、d2 和 d4。 因为 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进制可以透過將x和y/2分別轉換為負四进制再將之交錯合併來完成轉換成2i进制的工作。如果x和y都是有限的二进制小數，則可以使用連續的带余除法來將十进制數轉換成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=1 ， d-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进制也可以做加减法。 首先要记住以下规则： 数字超过3时, 减 4 "进" −1 到左边第二位。 数字小于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} 。 下面是一个常用的复数对照表。我们可以用叠加的方法来转换复数 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).