c++ - 反转按位左移和或赋值

标签 c++ c bit-manipulation bit-shift or-operator

这个的反函数是什么?

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

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

最佳答案

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

B << 3将'B'向左移动三位,并且它不会循环。这意味着 B 的前三位的状态被删除 - 除非你知道这些,否则你将无法恢复 B。

例子:

10101101 << 3

Turns: 10101101
          ^---^
Into:  01101000
       ^---^

前三位丢失,后三位补零。删除的数据被删除。

| 0x07填充底部三位(用 111 ),所以即使你没有移动,你也会用 111 删除最低的三位,使这些位无法恢复。

现在如果它是异或而不是或,它可以用另一个异或恢复:

A ^ same-value 可以被另一个A ^ same-value撤销因为((A ^ B) ^ B) == A

A | same-value 不能被另一个A | same-value撤销

A | same-value不能用AND撤销:A & same-value

但移位仍然会导致问题,即使它是异或运算(实际上不是)。

关于c++ - 反转按位左移和或赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17847613/

相关文章:

C++ sizeof 包装类

c - 使用 getchar() 和 putchar() 的非常简单的 C 问题

c - 了解格式说明符整数 (%d)

c - 动态 fscanf 到数组中

java - 在字节数组上进行右位旋转/循环移位的最快方法是什么

c++ - 凉亭回调未触发

c++ - fatal error : opencv2/opencv_modules. hpp:没有这样的文件或目录 #include "opencv2/opencv_modules.hpp"

c - 返回 x,其中从位置 p 开始的 n 位设置为 y 的最右边 n 位,其他位保持不变

javascript - 为什么 OR 0 在 Javascript 中舍入数字?

c++ - 为什么占用临时地址是非法的?