在整数中查找特定的半字节

Finding a specific nibble in an integer

我将如何使用按位运算在整数中找到一个半字节?

我需要具体地提取给定的半字节。

方法看起来像这样

private int nibbleExtract(int x, int whichNibbleToGet)

以及此方法的示例 return

nibbleExtract(0xFF254545, 7); // => 0xF

您可以将数字移动 4 倍的半字节索引,并使用 0xF 进行屏蔽:

int nibbleIndex = 7;
int data = 0xFF254545;
int nibble = (data >> 4*nibbleIndex) & 0xF;

How would you do this without multiplication?

像这样:

int nibble = (data >> (nibbleIndex << 2)) & 0xF;

现代优化器会为您将 4*x 转换为 x << 2,因此这两种选择通常会为您提供相同的性能(而第一种当然更具可读性)。