在C编程中改变位

时间:2013-10-26 18:19:34

标签: c bit-manipulation bitwise-operators

我在C编程中编码。 假设我有一个角色: char letter = 0x0000; 所以这封信的二进制数据现在是“00000000” 假设我想将二进制数据更改为“10000000”,稍后将其更改为“10010000”,是否有一个按位运算符或方法可以让我将“0”更改为“1”或“1”更改为“ 0“在特定位置。这也可能吗?

3 个答案:

答案 0 :(得分:8)

如果你用1位对任何位进行异或,它会切换其值:

0 ^ 1 = 1
1 ^ 1 = 0

类似地,如果您将任何位与0进行异或,则它保持相同的值:

0 ^ 0 = 0
1 ^ 0 = 1

因此,您可以通过将数字与第0位除零的数字进行异或来翻转数字的第n位:

val ^= (1 << n);

希望这有帮助!

答案 1 :(得分:3)

是的,这是非常有可能的。只需对数字使用按位异或或简单的XOR运算符,其中n为2的幂,其中n是要更改的数字。 ^是C中的XOR运算符。

  000000 (decimal 0)
^ 100000 (decimal 32 = 2 power 5 = 1 << 5)
= 100000 

    1010 (decimal 10)
XOR 0010 (decimal 2 = 2 power 1 = 1 << 1)
  = 1000 

只需将1位移位n位,即可计算2的幂。因此,通过将位移1到4位可以获得2到4的幂。

inputNum ^(1&lt;&lt; n&lt; n)将提供您需要切换所需的内容。

Bitwise XOR "^"
bit a   bit b   a ^ b (a XOR b)
0       0       0
0       1       1
1       0       1
1       1       0

但请记住,在已经有1的位上执行XOR会将其转换为零。因为1 ^ 1 = 0;

如果您只想将0转换为1并保留1(如果已经存在)。您可以使用按位或运算符。

Bitwise OR "|"
bit a   bit b   a | b (a OR b)
0       0       0
0       1       1
1       0       1
1       1       1

以下是一个例子

  11001110
| 10011000
= 11011110

来源:http://en.wikipedia.org/wiki/Bitwise_operations_in_C&amp; http://en.wikipedia.org/wiki/Bitwise_operation

答案 2 :(得分:1)

您可以使用按位AND(&amp;)和OR(|)运算符。 例如:

01001000 | 10111000 = 11111000

以下是: 72 | 184 = 248

(72 = 64 + 8)

有关详细信息,请参阅以下教程: http://www.cprogramming.com/tutorial/bitwise_operators.html