我从程序员的角度看计算机系统,我正在学习逻辑运算符,它与按位运算符相似,但有一些区别。
我无法弄清楚的是,当您有逻辑操作数时,0x00返回0x01而不是0x11?
!是不正确的?所以NOT 0(false)应该是1(true),另一个NOT 0(false)也应该是1(true),对吧?
我看一下按位运算符的示例:〜00,自然会返回11,但是C的逻辑运算符似乎有很大的不同。
为什么会这样?
我已经尝试过的内容:进一步阅读以找到所需的答案,似乎不在这里。
我认为问题是:可能与十六进制的工作方式有关?但是,十六进制仍可以具有0x11。 。 。
答案 0 :(得分:6)
因为这是语言的定义方式。 !
是逻辑NOT运算符,C语言中的布尔逻辑适用于1
和0
的{{1}}和true
。
C17 6.5.3.3:
逻辑求反运算符的结果 ! 如果其操作数的值比较则为0 不等于0,如果其操作数的值等于0,则不等于1。结果的类型为
您可以将其视为返回false
,尽管实际上是出于向后兼容的原因返回bool
。与C ++不同,它确实返回int
。关系运算符和相等运算符也是如此。
答案 1 :(得分:2)
表达式!n等效于(n == 0)。如果为true,则返回1,如果为false,则返回0。
答案 2 :(得分:0)
!0x00
和~0x00
都不会给您0x11
。
!n
与n==0
相同,计算结果为1
或0
。
~n
否定了二进制表示形式的位,而不是您选择输入数字的文字的位数。