C编程中的一点变化

C编程中的一点变化,c,bit-manipulation,bitwise-operators,C,Bit Manipulation,Bitwise Operators,我正在用C语言编程。 假设我有一个角色: 字符字母=0x0000; 所以字母的二进制数据现在是“00000000” 假设我想将二进制数据更改为“10000000”,然后再将其更改为“10010000”,是否存在允许我在特定位置将“0”更改为“1”或将“1”更改为“0”的按位运算符或方法。这也是可能的吗?如果将任何位与1位异或,它将切换其值: 0 ^ 1 = 1 1 ^ 1 = 0 类似地,如果将任何位与0进行异或,它将保持相同的值: 0 ^ 0 = 0 1 ^ 0 = 1 因此,您可以通过将

我正在用C语言编程。 假设我有一个角色: 字符字母=0x0000; 所以字母的二进制数据现在是“00000000”
假设我想将二进制数据更改为“10000000”,然后再将其更改为“10010000”,是否存在允许我在特定位置将“0”更改为“1”或将“1”更改为“0”的按位运算符或方法。这也是可能的吗?

如果将任何位与1位异或,它将切换其值:

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

0 ^ 0 = 0
1 ^ 0 = 1
因此,您可以通过将数字的第n位与除第n位以外的所有位置均为零的数字进行异或来翻转该数字:

val ^= (1 << n);
val^=(1您可以使用按位AND(&)和OR(|)运算符。
例如:

01001000| 10111000 = 11111000

具体做法如下: 72 | 184=248

(72=64+8)

有关详细信息,请参见以下教程:

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

  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的位执行异或将把它转换为零

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

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

来源:&

是的,C中可能有位运算符。您能告诉我将用于从“00000000”变为“00100000”的位运算符吗(将位置2处的“0”更改为“1”)?检查ans。通过TemplateTypeDef,这不是位置2。位通常从右到左计数,从零开始,因此它将是位5。@wildplasser-我不确定我是否理解您的评论…您能澄清一下吗?@JackGabishya,请记住,带一些位掩码的XOR将在掩码有位值的地方切换位值,而带相同掩码的OR将切换位值始终将“然后”设置为1,带反转掩码的and将始终将其设置为0。@Leeor-由于问题特别提到将0切换为1或1切换为0,我假设OP想要切换位。但您是对的-这可能不是他们想要的。您的第一个示例有一个输入错误:
1^1
0
,而不是
>1
@MichaelRawson-哦,哎呀!谢谢你发现了。修复了!
  11001110
| 10011000
= 11011110