8

这将是什么反函数?

A = (B << 3) | 0x07;

B当我已经拥有相应的 时,如何获得A

4

2 回答 2

17

您永远无法完全恢复所有位。

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

但是这种转变仍然会导致问题,即使它是异或(它不是)。

于 2013-07-25T01:43:53.390 回答
1

给定(以 8 位B为例,0b用于二进制形式,仅演示)

B = 0b00000000
B = 0b00100000
//...
B = 0b11100000

你可以得到相同的A,所以我不认为你可以反转计算,最左边的 3 位丢失了。

于 2013-07-25T01:50:13.577 回答