如何以幻数存储查找表?

时间:2015-06-05 08:20:27

标签: python dictionary lookup-tables magic-numbers

我看到了一些有趣的here,说你可以用魔术数字存储查找表。

我尝试使用暴力查找幻数,但所有结果都不正确。

如何为某个查找表找到正确的幻数? 谢谢。

1 个答案:

答案 0 :(得分:0)

正如该答案的作者所说:

  

幻数将表存储为位串,并带有n - th   对应于n表条目

的数字(从末尾开始)

这是一个非常简单的例子:

Entry   Value   Bit
-----   -----   ---
  0     True     1
  1     False    0
  2     False    0
  3     True     1
                 b  # needed to indicate
                 0  # 'binary number'

此查找表的“幻数”,从底部读取,是:

>>> 0b1001  # (1 * 8) + (0 * 4) + (0 * 2) + (1 * 1)
9

或者,旋转它:

              3      2      1      0      | Entry
              True   False  False  True   | Value
0      b      1      0      0      1      | Bit    # -> 0b1001

在提取输出方面,right-shift binary operator x >> yx中的所有位移到y个位置,截断最后y位:< / p>

>>> for x in range(4):
        print(x, '0b{:04b}'.format(9>>x))


0 0b1001
1 0b0100
2 0b0010
3 0b0001

并且bitwise AND & 1会告诉您最后一位的值。取消结果:

>>> for x in range(4):
    print(x, 9>>x&1)


0 1
1 0
2 0
3 1

另一个例子:

Entry   Value   Bit
-----   -----   ---
  0     True     1
  1     False    0
  2     True     1
  3     False    0
                 b  # needed to indicate
                 0  # 'binary number'

此查找表的“幻数”,从底部读取,是:

>>> 0b0101  # (0 * 8) + (1 * 4) + (0 * 2) + (1 * 1)
5

或者,旋转它:

              3      2      1      0      | Entry
              False  True   False  True   | Value
0      b      0      1      0      1      | Bit    # -> 0b0101