这个的反函数是什么?
A = (B << 3) | 0x07;
当我已经有相应的A
时,如何获得B
?
最佳答案
您永远无法完全恢复所有位。
B << 3
将'B'向左移动三位,并且它不会循环。这意味着 B 的前三位的状态被删除 - 除非你知道这些,否则你将无法恢复 B。
例子:
10101101 << 3
Turns: 10101101
^---^
Into: 01101000
^---^
前三位丢失,后三位补零。删除的数据被删除。
| 0x07
填充底部三位(用 111
),所以即使你没有移动,你也会用 111
删除最低的三位,使这些位无法恢复。
现在如果它是异或而不是或,它可以用另一个异或恢复:
A ^ same-value
可以被另一个A ^ same-value
撤销因为((A ^ B) ^ B) == A
A | same-value
不能被另一个A | same-value
撤销
A | same-value
也不能用AND撤销:A & same-value
但移位仍然会导致问题,即使它是异或运算(实际上不是)。
关于c++ - 反转按位左移和或赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17847613/