我们将每个 4 位组称为“半字节”。从 1 开始从右到左对半字节进行索引。在示例 0xDEAD
中,索引 1 的半字节为
D
,索引 2 为 A
,索引 3 为 E
,索引 4 为 D
。 让我们跟踪每个半字节的去向。具有奇数索引的半字节转到相应的偶数索引,即左侧的半字节。具有偶数索引的半字节向右半字节。
然后我们可以选择每个类别的小食。具有奇数索引的半字节可以使用位掩码
0x0f0f0f0f
选取,偶数索引可以使用
0xf0f0f0f0
选取。这里我们按位和带有位掩码的输入来选择位。然后我们可以将它们分别向左和向右移动 4 位(即半字节),然后按位或来得到答案。
代码如下:
unsigned int swapAdjacentNibbles(unsigned int input)
{
return ((input & 0x0f0f0f0f) << 4) | ((input & 0xf0f0f0f0) >> 4);
}