这将是什么反函数?
A = (B << 3) | 0x07;
B
当我已经拥有相应的 时,如何获得A
?
您永远无法完全恢复所有位。
B << 3
将“B”向左移动三位,并且不会循环。这意味着 B 的前三位的状态被擦除 - 除非您知道这些,否则您将无法恢复 B。
例子:
10101101 << 3
Turns: 10101101
^---^
Into: 01101000
^---^
前三位丢失,后三位用零填充。删除的数据被删除。
| 0x07
填充底部三位(用)111
,所以即使你没有移位,你也会用 擦除最低三位111
,使这些位无法恢复。
现在,如果它是 XOR'd 而不是 OR'd,它可以通过另一个 XOR 恢复:
A ^ same-value
可以与另一个撤消,A ^ same-value
因为((A ^ B) ^ B) == A
A | same-value
无法与他人撤销A | same-value
A | same-value
也不能用AND 撤消:A & same-value
但是这种转变仍然会导致问题,即使它是异或(它不是)。
给定(以 8 位B
为例,0b
用于二进制形式,仅演示)
B = 0b00000000
B = 0b00100000
//...
B = 0b11100000
你可以得到相同的A
,所以我不认为你可以反转计算,最左边的 3 位丢失了。