c - 交换 16 位值的前 8 位和后 8 位

标签 c bit

我尝试交换 16 位值的前 8 位和后 8 位。例如,00000001 11001100 变为 11001100 00000001;好吧,我不知道如何实现它。我尝试了不同的方法,但它不起作用......任何帮助将不胜感激。抱歉,如果这个问题很简单。我刚刚开始学习一些东西。谢谢你。我有一个功能:

unsigned short swap_bytes(unsigned short x) {

}

最佳答案

假设该值恰好是 16 位。

unsigned short swap_bytes(unsigned short x) 
{
    unsigned short bitmask = 0x00FF;
    unsigned short temp = x & bitmask;
    x = x >> 8;
    temp = temp << 8;
    x = x | temp;
    return x;
}

它是如何工作的:

  1. bitmask = 0x00FF 使位掩码成为一个具有 8 个前导 0 位和 8 个尾随 1 的值。
  2. temp = x & bitmask 使 temp 成为一个具有 8 个前导零位的值,然后这 8 位与 x 的最后 8 位相同。
  3. x = x >> 8 将 x 的最左边(最高有效)8 位向右移动,并用 0 替换它们。
  4. temp = temp << 8 将 temp 最右边的 8 位左移,并用 0 替换。
  5. x = x | temp 将 x 的后 8 位(移位前 x 的前 8 位)与 temp 的前 8 位(移位前 x 的后 8 位)组合起来。

关于c - 交换 16 位值的前 8 位和后 8 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21619268/

相关文章:

c - 奇偶查找表生成

c++ - 关于 C/C++ 标准中的时间/空间复杂度

c++ - 将代码声明转化为文字(引用运算符和取消引用运算符混淆)

c - 如何在 C 中给客户端特定的 ip 地址

memory - 有理数向量的位编码

c# - 字节到底是什么,它与二进制有什么关系?

c - 在很小的内存中表示非常大的位数组

使用realloc扩展大小的C动态数组错误: Invalid next-size

c - 动态数组的可变参数函数?

c - 8 位无符号字符数组到无符号字符