什么是!0在C?

我知道在C中,对于if语句和比较,FALSE = 0,其他任何等于true。

因此,

int j = 40 int k = !j k == 0 // this is true 

我的问题恰恰相反。 什么!0成为? 1?

 int l = 0 int m = !l m == ? // what is m? 

C中的布尔/逻辑运算符需要产生0或1。

从ISO C99标准的第6.5.3.3/5节开始:

逻辑否定运算符的结果! 如果其操作数的值不等于0,则为0;如果其操作数的值等于0,则为1。

实际上, !!x是强制值为0或1的常用习惯用法(我个人更喜欢x != 0 )。

另请参阅comp.lang.c FAQ中的Q9.2 。

§6.5.3.3/ 5:“逻辑否定运算符的结果!如果其操作数的值比较不等于0,则为0;如果其操作数的值比较等于0则为1.结果的类型为int。”

其他逻辑运算符(例如, &&|| )也总是产生0或1。

一般来说,是的,它会变成1.即使这是保证行为(我不确定),我会认为依赖它的代码非常糟糕。

你可以认为这是一个真正的价值。 我不会再承担任何其他事情了。

Bang运算符(!)是C,C ++和C#中常见的逻辑非运算符,所以

 !0 == 1 !1 == 0 

这是基于被解释为真或假的语言特征……在更现代的语言中,它将是这样的

 !false == true !true == false 

关于真值表,请参阅DeMorgan Law …

!x将扩展为(x==0)所以:

  • 如果x = 0 – > !x取值(0==0) = TRUE(值1)
  • 如果x!= 0 – > !x取值(x==0) = FALSE(值0)