我尝试使用逻辑运算符在 0xAA 和 0x55 之间切换。
我知道我可以使用 c >> 1
从 0xAA 更改为 0x55,但我被要求使用逻辑运算符而不是按位运算符来执行此操作,所以我不知道是否需要使用>> 运算符...
但是我对使用 NOT 逻辑运算有点困惑。
我确信如果我说
unsigned char c = 0xAA;
unsigned char b = !c;
那么 b 就是 0x55。相反,我得到了 0 的输出。难道它不应该将每个单独的位切换到相反的位置,给我 0x55 吗?
感谢您的帮助。
最佳答案
Instead I got an output of 0.
logical operators与 boolean values 合作:true
和 false
。
C 语言将任何非 0
的标量值处理为 true
,将 0
处理为 false
。
Logical NOT operator (!
)将任何 true 值(即不同于 0
)转换为 false
(即 0
)。
假设您可以使用算术运算符(加法、乘法、除法),您可以计算输入数字的每一位,使用逻辑非运算符更改其值,然后将这些位组合回一个数字,该数字是输入的数字。
例如,c
的最后一位是 c % 2
,如果从数字中删除该位并且将其他位移位以填充,则剩下的数字它的位置是c/2
(或者您已经知道的c >> 1
。)
关于c - c 中逻辑 NOT 运算未返回预期值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49454127/