反转按位运算
Reversing a bitwise operation
如果我有例如:a = (b << 8) | (c << 4) | d
我如何从 a
得到 b
c
和 d
?或者如果我有 a
和 d
并且需要得到 b
和 c
?
不幸的是,对于这样的问题没有单一的解决方案(除非在非常特殊的情况下)。 OR 运算符 (|
) 没有逆运算,因此即使是以下简化问题:
a = b | c
其中 a
和 c
是已知的,无法求解(至少要得到一个单一的解决方案)。
更实际的例子,你可以考虑一些超级简单的东西:
11 = 10 | c
那么c
可能是11
或01
,并且解决方案的数量随着位数的增加而增加。
如果我有例如:a = (b << 8) | (c << 4) | d
我如何从 a
得到 b
c
和 d
?或者如果我有 a
和 d
并且需要得到 b
和 c
?
不幸的是,对于这样的问题没有单一的解决方案(除非在非常特殊的情况下)。 OR 运算符 (|
) 没有逆运算,因此即使是以下简化问题:
a = b | c
其中 a
和 c
是已知的,无法求解(至少要得到一个单一的解决方案)。
更实际的例子,你可以考虑一些超级简单的东西:
11 = 10 | c
那么c
可能是11
或01
,并且解决方案的数量随着位数的增加而增加。