! c运算符,是两个NOT吗?
我阅读这个代码 ,并有此行
switch (!!up + !!left) {
什么是!!
操作员? 两个逻辑NOT?
是的,这是两个不是。
如果a
是非零,则a
是1
如果a
是0
则a
是0
你可以想到!!
就像夹紧到{0,1}
。 我个人觉得这个用法是一个不好的尝试。
你可以这样想像:
!(!(a))
如果你一步一步做,这是有道理的
result = !42; //Result = 0 result = !(!42) //Result = 1 because !0 = 1
这将返回1
与任何数字(-42,4.2f等),但只有0
,这将发生
result = !0; //Result = 1 result = !(!0) //result = 0
!!
是(_Bool)
一种更便携的(C99之前的)替代品。
你是对的。 这是两个不是。 要明白为什么要这样做,请尝试下面的代码:
#include <stdio.h> int foo(const int a) { return !!a; } int main() { const int b = foo(7); printf( "The boolean value is %d, " "where 1 means true and 0 means false.\n", b ); return 0; }
它输出The boolean value is 1, where 1 means true and 0 means false.
如果你放弃!!
但是,它输出The boolean value is 7, where 1 means true and 0 means false.