2i進制

来自testwiki
跳转到导航 跳转到搜索

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

转换2i进制到十进制

Template:Math的冪
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

Template:Caption

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

b进制数d3d2d1d0十进制数为

+d3b3+d2b2+d1b+d0

2i进制中,b=2i

示例

11012i 转换为十进制,可按照上述公式填入相应数字:

1(2i)3+1(2i)2+0(2i)1+1(2i)0=8i4+0+1=38i

再比如: 10300032i 十进制是

1(2i)6+3(2i)4+3(2i)0=64+316+3=13

十进制转换到2i进制

也能将十进制数转换为2i进制。 每个复数(形如a+bi) 都有个2i进制形式。 大多十进制数都只有1个形式,但像1这样的数在十进制中有两种形式[[0.999...|1.Template:Overline = 0.Template:Overline]], 相对应的 1/5有两种2i进制形式:1.Template:Overline2i = 0.Template:Overline2i

要转换十进制数,先将实部虚部分别转换为2i进制数,然后加到一起即可。 比如, Template:Math 等于Template:Math 加上 Template:MathTemplate:Math的2i进制数是103, Template:Math的2i进制数是20,因此 Template:Math = Template:進制

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

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

示例:实数

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

710=d0+d1b+d2b2+d3b3+d4b4+d5b5=d0+2id14d28id3+16d4+32id5=d04d2+16d4+i(2d18d3+32d5)

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

710=0103032i=103032i.

示例: 虚数

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

6i10=302i

其他的轉換方式

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

例如:35+23i=Template:進制

                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进制中小数点一样可以用,比如...d5d4d3d2d1d0.d1d2d3... 中,小数点用来分割b的正数和負数幂。带小数点时,公式是:

d5b5+d4b4+d3b3+d2b2+d1b+d0+d1b1+d2b2+d3b3

32id5+16d48id34d2+2id1+d0+12id1+14d2+18id3

=32id5+16d48id34d2+2id1+d0i2d114d2+i8d3

示例

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

i=32id5+16d48id34d2+2id1+d0+12id1+14d2+18id3=i(32d58d3+2d112d1+18d3)+16d44d2+d014d2

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

i=10.22i.

示例(分數)

13轉換為2i進制,其結果為-0.Template:Overline

加减法

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。我们得到结果123202i

示例:减法

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

         - 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。 结果就是 11312i

乘法

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

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

也就是 (98i)(29+4i)=293196i

查-{表}-转换

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

Template:Col-begin Template:Col-break

十进制 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

Template:Col-break

十进制 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

Template:Col-break

十进制 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

Template:Col-break

十进制 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

Template:Col-end

示例

5=16+(34)+1=103012i
i=2i+2(12i)=10.22i
734712i=1(16)+1(8i)+2(4)+1(2i)+3(12i)+1(14)=11210.312i

参见

参考资料

  • D. Knuth. The Art of Computer Programming. Volume 2, 3rd Edition. Addison-Wesley. pp. 205, "Positional Number Systems"
  • Template:Cite journal
  • Template:Pns Template:高德納