Какова была бы обратная функция для этого?
A = (B << 3) | 0x07;
Как я могу получить B
когда у меня уже есть соответствующий A
?
Вы никогда не сможете восстановить все биты полностью.
B << 3
сдвигает «B» на три бита влево, и он не зацикливается. Это означает, что состояние первых трех битов B стерто — если вы не знаете их, вы не сможете восстановить B.
Пример:
10101101 << 3
Turns: 10101101
^---^
Into: 01101000
^---^
Три верхних бита потеряны, а нижние три заполнены нулями. Удаленные данные удалены.
| 0x07
заполняет нижние три бита (с 111
), поэтому даже если бы вы не сдвинулись, вы удалили бы младшие три бита с помощью 111
делая эти биты невосстановимыми.
Теперь, если бы это был XOR вместо OR, его можно было бы восстановить с помощью другого XOR:
A ^ same-value
Можно расстаться с другим A ^ same-value
так как ((A ^ B) ^ B) == A
A | same-value
не могу расстаться с другим A | same-value
A | same-value
также не могу быть отмененным с помощью AND: A & same-value
Но сдвиг все равно вызовет проблемы, даже если это будет XOR (что не так).
Дано (Использование 8-битного B
как пример, используя0b
только для двоичной формы, только для демонстрации)
B = 0b00000000
B = 0b00100000
//...
B = 0b11100000
Вы можете получить то же самое A
, поэтому я не думаю, что вы можете изменить расчет, потеряны 3 самых левых бита.