问题描述
我试图在第一个位置 (b0) 处获取 int (4Bytes-32bit) 的唯一 n 位
我正在尝试:
temp = value << (32-innerIndex);
temp = temp >> 32;
其中 value
是整数,innerIndex
是我想要取的位的位置。
我做错了吗?
解决方法
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。