[英]C++: Bitwise AND
我試圖了解如何使用按位與來提取單個字節的值。
我擁有的是一個 4 字節數組,並將最后 2 個字節轉換為單個 2 字節值。 然后我試圖從那個 2 字節值中提取原始的單字節值。 有關我的代碼和值的屏幕截圖,請參閱附件。
我遇到的問題是我無法獲得 2 字節值中最后一個字節的值。
我將如何使用 Bitwise AND 來執行此操作?
我遇到的問題是我無法獲得 2 字節值中最后一個字節的值。
您的 2byte 整數由值 3 和 4 組成(因為您的指針指向a[1]
)。 正如您在測試中已經看到的,您可以通過應用掩碼0xFF
來獲得3
。 現在,要獲得4
您需要刪除低位並移動值。 在您的示例中,通過使用掩碼0xFF00
您可以有效地從 16 位數字中刪除3
,但將4
保留在4
字節數字的高字節中,即值1024 == 2^10
-- 第 11 位集,即是第二個字節中的第三位(從最不具有代表性的開始計數)
您可以將結果向右移動 8 位以獲得4
,否則您可以完全忽略掩碼,因為只需向右移動,最低位就會消失:
4 == ( x>>8 )
更有趣的按位測試結果可以通過處理單個數字獲得:
int x = 7; // or char, for what matters:
(x & 0x1) == 1;
(x & (0x1<<1) ) == 2; // (x & 0x2)
(x & ~(0x2)) == 5;
您需要添加一些位移來將屏蔽值從高字節轉換為低字節。
我遇到的問題是我無法獲得 2 字節值中最后一個字節的值。
不確定“監視”表來自哪里,或者是否涉及更多代碼,但在我看來結果是正確的。 請記住,其中一個是高字節,因此該值被移動了 << 8 位。 在小端機器上,高字節將是第二個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.