2i进制

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

2i进制,是由高德纳于1955年提出来的,当时用作高中科学精英研究用[来源请求]。它是一种以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进制转换为十进制可以用标准公式。这个公式是:

<math>b</math>进制数<math>\ldots d_3d_2d_1d_0</math> 的十进制数为

<math>\cdots + d_3\cdot b^3+d_2\cdot b^2+d_1\cdot b+d_0</math>

2i进制中,<math>b = 2i</math>。

示例[编辑]

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

<math>1\cdot(2i)^3 + 1\cdot(2i)^2 + 0\cdot(2i)^1 + 1\cdot(2i)^0 = -8i - 4 + 0 + 1 = -3 - 8i</math>

再比如: <math>1030003_{2i}</math> 十进制是

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

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

<math>

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

<math>\begin{align} 7_{10} = 010303_{2i} = 10303_{2i}.\end{align}</math>

示例: 虚数[编辑]

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

<math>\begin{align}6i_{10} = 30_{2i}\end{align}</math>

其他的转换方式[编辑]

对实数而言,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进制中小数点一样可以用,比如<math>...d_{5}d_{4}d_{3}d_{2}d_{1}d_{0} . d_{-1}d_{-2}d_{-3}...</math> 中,小数点用来分割b的正数和负数幂。带小数点时,公式是:

<math>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}</math>

<math>

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}</math> <math>=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}</math>

示例[编辑]

将i转换为2i进制,没有小数点的话,可能没办法做到。因此:

<math>

\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} </math>

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

<math>\begin{align}i = 10.2_{2i}\end{align}</math>.

示例(分数)[编辑]

将<math>\frac{1}{3}</math>转换为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。我们得到结果<math>12320_{2i}</math>。

示例:减法[编辑]

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

         - 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。 结果就是 <math>1131_{2i}</math>。

乘法[编辑]

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

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

也就是 <math>(9-8i)\cdot(29+4i) = 293-196i</math>。

查表转换[编辑]

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

示例[编辑]

<math>5 = 16 + (3\cdot-4) + 1 = 10301_{2i}</math>
<math>i = 2i + 2\left(-\frac{1}{2}i\right) = 10.2_{2i}</math>
<math>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}</math>

参见[编辑]

参考资料[编辑]

  • 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).