执行位操作以交换相邻的半字节[关闭]

问题描述 投票:0回答:1

在C语言中,如何对

int
进行位操作以交换相邻的半字节

给我的输入是

0xDEAD
,预期输出是
0xEDDA

c bit-manipulation
1个回答
2
投票

我们将每个 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); }

© www.soinside.com 2019 - 2024. All rights reserved.