如何以幻数存储查找表?
How do I store lookup tables in magic numbers?
我看到了一些有趣的东西 here,说你可以将查找 table 存储在幻数中。
我曾尝试使用暴力破解幻数,但所有结果都不正确。
如何找到特定查找的正确幻数 table?
谢谢。
正如该回答的作者所说:
The magic number stores the table as a bitstring, with the n
-th
digit (from the end) corresponding to the n
th table entry
这是一个非常简单的例子:
Entry Value Bit
----- ----- ---
0 True 1
1 False 0
2 False 0
3 True 1
b # needed to indicate
0 # 'binary number'
因此,此查找 table 的 "magic 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 >> 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'
因此,此查找 table 的 "magic 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
我看到了一些有趣的东西 here,说你可以将查找 table 存储在幻数中。
我曾尝试使用暴力破解幻数,但所有结果都不正确。
如何找到特定查找的正确幻数 table? 谢谢。
正如该回答的作者所说:
The magic number stores the table as a bitstring, with the
n
-th digit (from the end) corresponding to then
th table entry
这是一个非常简单的例子:
Entry Value Bit
----- ----- ---
0 True 1
1 False 0
2 False 0
3 True 1
b # needed to indicate
0 # 'binary number'
因此,此查找 table 的 "magic 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 >> 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'
因此,此查找 table 的 "magic 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