在 C++ 中分离特定位

问题描述

我试图在第一个位置 (b0) 处获取 int (4Bytes-32bit) 的唯一 n 位

我正在尝试:

temp = value << (32-innerIndex);
temp = temp >> 32;

其中 value 是整数,innerIndex 是我想要取的位的位置。

我做错了吗?

enter image description here

解决方法

unsigned int mask = 1 << bitnumber;   // Create a mask from the bitnumber
unsigned int bit = value & mask;     // Use the mask to extract the bit.
bit = bit >> bitnumber;     // Shift the bit to position one.

位如下(假设bitnumber为4):

value = 0x0000ff80
mask = 0
bitnumber = 4

mask = 0000 0000 0000 0000
value = 0000 0000 1111 1000
mask = (1 << bitnumber)
mask = 0000 0000 0001 0000
bit = value & mask
bit = 0000 0000 0001 0000
bit >>= bitnumber
bit = 0000 0000 0000 0001

或更紧凑:

temp = (value & (1 << innerIndex)) >> innerIndex;

甚至更高效:

temp = (value >> innerIndex) & 1;

请勿为此使用 signed int,因为这可能会导致不必要的副作用。

位数来自 0..31。