c中的!<number>
是什么意思。例如!-2
或!3
?
cout << !-2;
Output:
0
cout << !3;
Output:
0
答案 0 :(得分:5)
!
是逻辑否定运算符。根据C标准(6.5.3.3一元算术运算符)
5逻辑求反运算符的结果!如果的值是0 其操作数的值等于0,如果其操作数的值等于1 比较等于0。结果的类型为int。表达式!E是 相当于(0 == E)。
并且来自C ++标准(8.3.1一元运算符)
9逻辑否定运算符的操作数!在上下文中 转换为布尔(第7条);如果转换后的值是true 操作数为false,否则为false。结果的类型为bool。
例如,这个表达式
cout << !-2;
根据C引号等效于
cout << ( 0 == -2 );
在C语言中,运算符的结果类型为int
,而在C ++语言中,运算符的结果类型为bool
。
请注意,在C ++中,您可以使用替代令牌not
。例如,上面的语句可以像
cout << not -2;
在C中,您可以包括标题<iso646.h>
,并使用宏not
作为运算符!
的替代记录。
还有另一把戏。例如,如果您希望从C函数返回一个整数表达式,以将其完全转换为1或0,则可以编写例如
return !!expression;
也就是说,如果expression
不等于0
,则第一次应用运算符!
会将表达式转换为0
,第二次应用运算符{{1 }}将结果表达式转换为!
。
就像写东西一样
1
但更紧凑。
答案 1 :(得分:1)
它被称为“逻辑非”。如果操作数不为零,则表达式的计算结果为false;如果操作数为零,则表达式的计算结果为true。将逻辑非应用于负零也会返回true。
答案 2 :(得分:1)
一元运算符!
是逻辑否定(即NOT)运算符。当操作数为true时,结果为false;当操作数为false时,结果为true。整数操作数隐式转换为布尔值。零是假,其他所有数字都是真。