7
A
回答
15
你永远无法完全恢复所有的位。
B << 3
将'B'移到左边三位,并且它不循环。这意味着B的前三名位的状态被擦除 - 除非你知道这些,你就不能够恢复B.
例子:
10101101 << 3
Turns: 10101101
^---^
Into: 01101000
^---^
前三名位丢失,最下面的三个填满了零。删除的数据被删除。
的| 0x07
填补了底部的三个位(与111
),所以即使你没有转移,你会用111
被擦除最低三个位,使得这些位是无法挽救的。
现在,如果有人进行XOR运算,而不是或运算,这将会是可恢复的另一个XOR:
A^same-value
可以与另一A^same-value
因为((A^B)^B) == A
A | same-value
不能被撤消与另一个A | same-value
A | same-value
也不能被撤消ne与AND:A & same-value
但是,这种转变仍然会导致问题,即使它是异或(它不是)。
+2
正确,你输掉了前三名。即使最初的功能被改变为左旋,你仍然会失去信息,因为'|无论如何,0x07'设置最右边的三位。 – Anthony
1
鉴于(使用8位B
为例,使用0b
为二进制形式,仅用于演示)
B = 0b00000000
B = 0b00100000
//...
B = 0b11100000
你可以得到相同的A
,所以我不认为你可以扭转计算,最左边的3位丢失。
相关问题
- 1. 使用左移位和按位或
- 2. 按位和左/右移
- 3. java按位左移
- 4. javascript - 如何反转按位移?
- 5. 在Python和C中按位左移#
- 6. C#反转位移
- 7. 按位运算符左移
- 8. C++按位左移32
- 9. 如何反转按位或操作?
- 10. 左分解的自动语法转换;和左递归移除
- 11. 根据方位向左转或右转
- 12. 转换C#和C++按位移
- 13. C#.net按位左移操作。
- 14. PHP /按位运算符左移
- 15. 按位左移意外结果
- 16. Prolog的移位或循环元素左
- 17. 左移或
- 18. 左算术移位的分段错误
- 19. 使用移位和旋转的位的反向顺序
- 20. 将左下角原点位置转换为左上角原点位置(和反转)
- 21. 按位向左旋转功能
- 22. 左移位并丢弃位
- 23. 左边划分:从matlab转移到scilab
- 24. 跳转声明偏移或位移?
- 25. 在javascript中反向按位移动
- 26. C位移位奇数结果过去15位移位左移
- 27. 做的东西,而移动和左击压或右击按下
- 28. 逻辑或和按位或
- 29. TCP标志过滤器的十六进制,按位或反转
- 30. 或者运营商分配左侧
所以你正在左移3并将低3位设置为1? B =(A >> 3)'有什么问题? (假设你意识到当你转移时你输了比特) – Nigel