Q
清除低位16位
6
A
回答
13
要清除任何特定位,可以使用按位與多家有那些地方的1的補碼。在你的情況,自號爲0xFFFF有低16位設置,你可以和它的補:
b &= ~0xFFFF; // Clear lower 16 bits.
如果你想設置那些位,你也可以使用按位或用數字,設立這些位:
b |= 0xFFFF; // Set lower 16 bits.
而且,如果你想翻轉那些位,你可以使用按位異或擁有一批具有這些位設置:
b ^= 0xFFFF; // Flip lower 16 bits.
希望這有助於!
2
一種方法是將其與0xFFFF0000(例如, value = value & 0xFFFF0000
1
使用和(&
)與由前16位全1(將假頂位,因爲它們)和下位全部爲零的面具(能殺死底位的數量)。
因此這將是
0x12345678 & 0xffff0000
如果該類型的大小是不知道,你想屏蔽掉僅低16位,你也可以建立面膜以另一種方式:使用口罩這將讓通過只低16位
0xffff
,並與按位不(~
)倒轉,所以它會成爲殺死只有較低的16位掩碼:
0x12345678 & ~0xffff
1
int x = 0x12345678;
int mask = 0xffff0000;
x &= mask;
4
要採取另一種路徑,你可以嘗試
x = ((x >> 16) << 16);
1
假設要清除位從有一個無符號類型不是「小級別」的價值,這是最安全,最簡便的方式以清除低16位:
b &= -0x10000;
值-0x10000
將被提升爲的b
由模運算的類型(無符號類型),導致所有高位被設置並且低16位是零。其實詹姆斯的答案是最安全的(最廣泛的用例),但他的回答和我對其他類似問題的推廣方式有點不同,我的方法可能更適用於相關問題。
+0
爲什麼不做'b&=〜(1?0xFFFF:b);'? –
相關問題
- 1. 16位std_logic_vector以降低VHDL
- 2. 16位位深
- 3. javascript十進制(16位低位)到十進制
- 4. TASM只使用16位寄存器訪問雙字的高位和低位字
- 5. 刪除最低位bit
- 6. 位NASM 16和位32
- 7. 16位RGB到3位RGB
- 8. 8位到16位轉換
- 9. Boost CRC 16位
- 10. 16位限制
- 11. 16位浮點
- 12. 16位灰度
- 13. 清除已定位項目
- 14. 在Android中清除位圖
- 15. 清除QML定位點
- 16. Winforms清除位圖圖像?
- 17. Java 16位對齊
- 18. 16位MUL裝配
- 19. Python和16位PGM
- 20. PHP unicode的16位
- 21. 16位2在VHDL
- 22. OpenCV與RGB 16位
- 23. cuda 16位整數
- 24. Numpy和16位PGM
- 25. 16位灰度PNG
- 26. 16位BMP驗證
- 27. 如何將兩個16位整數(高位字/低位字)轉換爲32位浮點數?
- 28. XOR高32位,低32位,64位數
- 29. 只能使用低16位的requestCode(谷歌播放服務)
- 30. 在GCC中獲取指針的低16位編譯時間
這實際上是很好的,因爲它也適用於16位和64位值,如果我沒有弄錯的話。 –
@射線 - 爲什麼不呢? – James
@ James-如果您在非32位機器(例如64位機器)上嘗試做類似'b&0xFFFF0000'的操作,那麼除了低32位外,這可能會意外地最終清除高32位位。 – templatetypedef