c - 如何在 C 中翻转一个字节中的特定位?

标签 c bit-manipulation bit

我正在尝试使用掩码并操作字节中的特定位。 例如:

我想用 C 编写一个程序,在特定位置翻转两位,例如第 0 位的位和第三位的位。 因此,11100011 将变为 01110011

如何交换这些位?

最佳答案

翻转位是通过使用掩码进行异或来完成的:在您想要翻转的位置设置位,然后执行异或,如下所示:

int mask = 0x90; // 10010000
int num  = 0xE3; // 11100011
num ^= mask;     // 01110011

这里有一些注意事项:

  1. 位通常从最低有效位置开始计算,因此您的示例翻转位置 4 和 7 中的位,而不是位置 0 和 4 中的位
  2. 要为单个位置构造位掩码,请使用表达式 1 << n , 其中n是从最低有效位开始计算的位置编号。
  3. 要将多个位合并到一个掩码中,请使用 |运算符(operator)。例如,(1 << 4) | (1 << 7)构造用于翻转位 4 和 7 的掩码。

关于c - 如何在 C 中翻转一个字节中的特定位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19617248/

相关文章:

c - 如何在没有循环的情况下将数组初始化为 C 中的某物?

c - 如何让 gcc 警告返回局部变量的地址?

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

c - 如何生成 16 位查找表来计算设置位

python - 如何打印字符串作为标准输入流的输入?

c - 确定参数和变量存储在哪个寄存器中吗?

c# - 将位数组转换为 uint 或类似的打包值

c++ - C/C++ 按位运算未产生预期输出?

c - 通过编辑数组元素的最后一位对数字进行编码

java - C++到Java代码转换疑惑