c中的!<number>
是什么意思。例如!-2
或!3
?
cout << !-2;
Output:
0
cout << !3;
Output:
0
!
是逻辑否定运算符。来自 C 标准(6.5.3.3 一元算术运算符(
5 逻辑否定运算符 ! 的结果为 0,如果值为 其操作数比较不等于 0,如果其操作数的值为 1 比较等于 0。结果的类型为 int。表达 !E 是 等效于 (0==E(。
并且来自C++标准(8.3.1 一元运算符(
9 逻辑否定运算符的操作数! 是上下文 转换为布尔值(第 7 条(;如果转换后的 操作数为假,否则为假。结果的类型为布尔值。
所以,例如,这个表达式
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
。
就好像写一样
return expression == 0 ? 0 : 1;
但更紧凑。
它被称为"逻辑不"。如果操作数不为零,则表达式的计算结果为 false,如果操作数为零,则表达式的计算结果为 true。将逻辑不应用于负零也会返回 true。
一元运算符!
是逻辑否定(即 NOT(运算符。当操作数为真时,结果为假,当操作数为假时,结果为真。整数操作数隐式转换为布尔值。零为假,所有其他数字为真。