什么是!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)