反转按位左移和OR赋值
Invert a bitwise left shift and OR assignment
这个反函数是什么?
A = (B << 3) | 0x07;
当我已经有相应的A
时,如何获得B
?
您永远无法完全恢复所有位。
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
撤消
但是这种转换仍然会引起问题,即使它是异或的(事实并非如此)。
Given(以8位B
为例,以0b
为二进制形式,仅用于演示)
B = 0b00000000
B = 0b00100000
//...
B = 0b11100000
你可以得到相同的A
,所以我认为你不能反向计算,最左边的3个比特丢失了。
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 标准库类型的赋值运算符的引用限定符
- 关于 c++ 函数中指针赋值的简单问题
- 复制构造函数、赋值运算符C++
- 标准::变体的赋值运算符
- cin >> int 给定一个字符串将 int 赋值为 0
- 使用 OR 运算符赋值
- 反转按位左移和OR赋值