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.a是1,Alpha.b被设置为254
有任何想法吗?
感谢致敬,
SamPrat
Dav*_*ven 40
在C中,true由1表示,并且false由0 表示.但是,在比较中,任何非假值都被视为真.
该!运营商确实布尔反转,所以!0为1!1 0.
的~操作者,然而,不按位反转,其中在值的每一位被替换为它的逆.所以~0是0xffffffff(-1).~1是0xfffffffe(-2).(并且-1和-2都被认为是真的,这可能让你感到困惑.)
你想要的是!,而不是~.
运算~符对每个单独的位取反。例如,假设Alpha.a是一个unsigned char. 然后~1以二进制形式读取 ~00000001,结果将是 11111110(同样是二进制),这与十进制的 254 和十六进制的 0xFE 相同。
正如其他人所建议的,使用!Alpha.a或Alpha.a ^ 1。