답변
모든 비트를 완전히 복구 할 수는 없습니다.
B << 3
'B'는 왼쪽으로 3 비트 이동하고 주변에서 반복되지 않습니다. 이것은 B의 상위 3 비트의 상태가 삭제됩니다 의미 - 당신이 사람들을 알지 못한다면, 당신은 B를 복구 할 수 없을 것입니다
예 :
10101101 << 3
Turns: 10101101
^---^
Into: 01101000
^---^
상위 3 비트가 손실되고, 하단 3 개는 0으로 채워집니다. 삭제 된 데이터가 삭제됩니다.
으로 아래의 3 비트를 채우므로, 변경하지 않았더라도 가장 낮은 세 비트를 111
으로 지우면 복구 할 수 없게됩니다. 이제
대신 논리합의 xor의 경우, 또 다른 XOR로 복구 할 것 :
A^same-value
는((A^B)^B) == A
가
A | same-value
이이되지 않을 수있는 다른 A^same-value
때문으로 취소 할 수 있습니다 다른 사람과 취소 취소 A | same-value
A | same-value
취소 할 수 없음 ne와 AND : A & same-value
하지만 XOR 된 경우에도 문제는 여전히 발생합니다. 주어진
맞습니다. 당신은 상위 3 비트를 잃게됩니다. 초기 함수가 왼쪽 회전으로 변경 되더라도 여전히 정보를 잃을 것입니다. 0x07'은 어쨌든 가장 오른쪽에있는 3 비트를 설정합니다. – Anthony
는
B = 0b00000000
B = 0b00100000
//...
B = 0b11100000
같은 A
를 얻을 수 있습니다 (시범 단지가, 바이너리 형식에 대한 0b
를 사용하여, 예를 들어 8 비트 B
사용), 그래서 당신이 계산을 취소 할 수 있습니다 생각하지 않는다 가장 왼쪽의 3 비트가 손실됩니다.
그래서 왼쪽 3을 이동하고 하위 3 비트를 1로 설정하고 있습니까? 'B = (A >> 3)'의 무엇이 잘못 되었습니까? (당신이 움직일 때 비트를 잃는다는 것을 알고 있다고 가정 할 때) – Nigel