簡體   English   中英

C++:按位與

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM