如何在C中使用逆

sam*_*rat 19 c bitwise-operators

[怎么用〜运算符]

我有一个结构说Alpha.我知道里面的元素的值Alpha(比如说a)可以是- 0或者1我希望相同结构的其他元素取Alpha.a的逆值.例如:

if Alpha.a = 1
then Alpha.b = 0
Run Code Online (Sandbox Code Playgroud)

反之亦然

我试过了:

Alpha.b = ~ (Alpha.a)
Run Code Online (Sandbox Code Playgroud)

但不幸的是它不工作-当Alpha.a1,Alpha.b被设置为254

有任何想法吗?

感谢致敬,

SamPrat

Dav*_*ven 40

在C中,true由1表示,并且false由0 表示.但是,在比较中,任何非假值都被视为真.

!运营商确实布尔反转,所以!0为1!1 0.

~操作者,然而,不按位反转,其中在值的每一位被替换为它的逆.所以~0是0xffffffff(-1).~1是0xfffffffe(-2).(并且-1和-2都被认为是真的,这可能让你感到困惑.)

你想要的是!,而不是~.


Pri*_*ley 33

使用XOR运算符:

Alpha.b = Alpha.a ^ 1;
Run Code Online (Sandbox Code Playgroud)


Lin*_*cer 6

运算~符对每个单独的位取反。例如,假设Alpha.a是一个unsigned char. 然后~1以二进制形式读取 ~00000001,结果将是 11111110(同样是二进制),这与十进制的 254 和十六进制的 0xFE 相同。

正如其他人所建议的,使用!Alpha.aAlpha.a ^ 1