在整数中查找特定的半字节
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
,因此这两种选择通常会为您提供相同的性能(而第一种当然更具可读性)。
我将如何使用按位运算在整数中找到一个半字节?
我需要具体地提取给定的半字节。
方法看起来像这样
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
,因此这两种选择通常会为您提供相同的性能(而第一种当然更具可读性)。