You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中对int类型执行位操作以交换相邻nibble?

C语言中用位操作交换int的相邻半字节(Nibble)

要实现交换int类型中每个字节内的相邻半字节(4位),可以通过掩码提取、位移和按位或操作完成,以下是具体实现:

核心思路

每个字节由两个半字节组成(高4位和低4位),我们需要:

  • 提取每个字节的高4位,右移4位到低4位的位置
  • 提取每个字节的低4位,左移4位到高4位的位置
  • 将两部分结果按位合并,得到交换后的数值

代码实现

#include <stdio.h>

int swap_adjacent_nibbles(int x) {
    // 提取高4位并右移,提取低4位并左移,最后按位或合并
    return ((x & 0xF0F0F0F0) >> 4) | ((x & 0x0F0F0F0F) << 4);
}

int main() {
    int input = 0xDEAD;
    int output = swap_adjacent_nibbles(input);
    printf("输入: 0x%X\n输出: 0x%X\n", input, output);
    return 0;
}

代码解释

  • 掩码0xF0F0F0F0:二进制为11110000 11110000 11110000 11110000,用于保留每个字节的高4位,丢弃低4位。右移4位后,这些高4位会移动到对应字节的低4位位置。
  • 掩码0x0F0F0F0F:二进制为00001111 00001111 00001111 00001111,用于保留每个字节的低4位,丢弃高4位。左移4位后,这些低4位会移动到对应字节的高4位位置。
  • 按位或操作:将上述两部分结果合并,每个字节内的高低半字节完成交换,最终得到整体结果。

验证示例

输入0xDEAD(二进制:1101 1110 1010 1101):

  1. 高4位提取右移后:0000 1101 0000 1010(0x0D0A)
  2. 低4位提取左移后:1110 0000 1101 0000(0xE0D0)
  3. 按位或结果:1110 1101 1101 1010(0xEDDA),与预期输出一致。

内容的提问来源于stack exchange,提问作者User_008

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:55:07