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