我正在尝试使用掩码并操作字节中的特定位。 例如:
我想用 C 编写一个程序,在特定位置翻转两位,例如第 0 位的位和第三位的位。
因此,11100011
将变为 01110011
。
如何交换这些位?
最佳答案
翻转位是通过使用掩码进行异或来完成的:在您想要翻转的位置设置位,然后执行异或,如下所示:
int mask = 0x90; // 10010000
int num = 0xE3; // 11100011
num ^= mask; // 01110011
这里有一些注意事项:
- 位通常从最低有效位置开始计算,因此您的示例翻转位置 4 和 7 中的位,而不是位置 0 和 4 中的位
- 要为单个位置构造位掩码,请使用表达式
1 << n
, 其中n
是从最低有效位开始计算的位置编号。 - 要将多个位合并到一个掩码中,请使用
|
运算符(operator)。例如,(1 << 4) | (1 << 7)
构造用于翻转位 4 和 7 的掩码。
关于c - 如何在 C 中翻转一个字节中的特定位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19617248/