簡體   English   中英

僅按位操作即可反轉(翻轉)數字的最后n位

[英]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<<40b10000 ,如果我們刪除1,我們得到的掩碼為0b1111那么我們可以使用此值與我們的數字進行異或0b1111以獲得所需的輸出。

適用於C和C ++

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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