我在这里看到了一些有趣的东西,说您可以将查找表存储为幻数。
我试过用蛮力找出这个神奇的数字,但是所有的结果都不正确。
如何为某个查找表找到正确的幻数?谢谢你。
正如那个回答的作者所说:
幻数将表存储为位串,
的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
在提取输出时,右移二进制运算符x >> y
将x
中的所有位右移y
位,截断最后的y
位:
>>> for x in range(4):
print(x, '0b{:04b}'.format(9>>x))
0 0b1001
1 0b0100
2 0b0010
3 0b0001
和按位与& 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