【发布时间】:2015-08-20 02:50:32
【问题描述】:
【问题讨论】:
标签: python dictionary lookup-tables magic-numbers
【问题讨论】:
标签: python dictionary lookup-tables magic-numbers
正如该答案的作者所说:
幻数将表存储为位串,
n-th 对应于nth 表条目的数字(从末尾开始)
这是一个非常简单的例子:
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 operatorx >> y 将x 中的所有位向右移动y 位,截断最后的y 位:
>>> 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
【讨论】:
8,magic_num>>x&1 == 1仅当x == 3时。
0b1000
0b1000 == 8,所以只选择了第四项(索引3)。