为什么逻辑语句!0x00在C中返回0x01?

时间:2018-09-25 20:48:24

标签: c

我从程序员的角度看计算机系统,我正在学习逻辑运算符,它与按位运算符相似,但有一些区别。

我无法弄清楚的是,当您有逻辑操作数时,0x00返回0x01而不是0x11?

!是不正确的?所以NOT 0(false)应该是1(true),另一个NOT 0(false)也应该是1(true),对吧?

我看一下按位运算符的示例:〜00,自然会返回11,但是C的逻辑运算符似乎有很大的不同。

为什么会这样?

我已经尝试过的内容:进一步阅读以找到所需的答案,似乎不在这里。

我认为问题是:可能与十六进制的工作方式有关?但是,十六进制仍可以具有0x11。 。 。

3 个答案:

答案 0 :(得分:6)

因为这是语言的定义方式。 !是逻辑NOT运算符,C语言中的布尔逻辑适用于10的{​​{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

!nn==0相同,计算结果为10

~n否定了二进制表示形式的位,而不是您选择输入数字的文字的位数。