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