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
|
2i的幂
将2i进制转换为十进制可以用标准公式。这个公式是:
进制数 的十进制数为
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是实数,因此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进制数。
找一个纯虚数的2i进制数,可以模拟实数的方法。 例如6i, 也可以用公式。实部全为零,虚部化为6。 6i 很容易看出 d1 = 3 其他各位都是0。6i就是:
对实数而言,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进制中小数点一样可以用,比如 中,小数点用来分割b的正数幂和负数幂。带小数点时,公式是:
或
将i转换为2i进制,没有小数点的话,可能没办法做到。因此:
因为实部为0,故 d4 = d2 = d0 = d-2 = 0。
接著考虑虚部部分,当 d5 = d3 = d -3 = 0 并且 当 d1=1 , d-1=2 时结果正确。所以
- .
将转换为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。我们得到结果。
减法和加法类似。下面是例子:
- 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。 结果就是 。
乘法也要用到上面两点。先逐位相乘,然后叠加。比如:
11201
20121 x
--------
11201 <--- 1 x 11201
12002 <--- 2 x 11201
11201 <--- 1 x 11201
00000 <--- 0 x 11201
12002 + <--- 2 x 11201
------------
120231321
也就是 。
下面是一个常用的复数对照表。我们可以用叠加的方法来转换复数
十进制 |
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
|
|
- 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).