[英]Invert (flip) last n bits of a number with only bitwise operations
給定一個二進制整數,如何僅使用c / c ++中的按位運算來反轉(翻轉)最后n位?
例如:
// flip last 2 bits
0110 -> 0101
0011 -> 0000
1000 -> 1011
您可以使用
#define flipBits(n,b) ((n)^((1u<<(b))-1))
例如flipBits(0x32, 4)
將翻轉最后4位,結果將為0x3d
這行得通,因為如果您考慮異或的工作原理
0 ^ 0 => 0
1 ^ 0 => 1
不會翻轉
0 ^ 1 => 1
1 ^ 1 => 0
比特被翻轉
(1<<b)-1
例如, 0b10000
您獲取最后n位,如果b為4,那么1<<4
為0b10000
,如果我們刪除1,我們得到的掩碼為0b1111
那么我們可以使用此值與我們的數字進行異或0b1111
以獲得所需的輸出。
適用於C和C ++
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.