这是什么反函数?
A = (B << 3) | 0x07;
如果我已经拥有相应的B
?
A
答案 0 :(得分:15)
你无法完全恢复所有位。
B << 3
向左移动'B'三位,并且它不会循环。这意味着B的前三位的状态被删除 - 除非你知道那些,否则你将无法恢复B.
示例:
10101101 << 3
Turns: 10101101
^---^
Into: 01101000
^---^
前三位丢失,底三位用零填充。删除的数据将被删除。
| 0x07
填充底部的三位(111
),所以即使你没有移位,你也会用111
删除最低的三位,比特无法恢复。
现在,如果它是XOR而不是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
但是这种转变仍会导致问题,即使它是异或(它不是)。
答案 1 :(得分:1)
给定(以8位B
为例,使用0b
表示二进制形式,仅演示)
B = 0b00000000
B = 0b00100000
//...
B = 0b11100000
你可以得到相同的A
,所以我认为你不能反转计算,最左边的3位会丢失。