C / C ++中的“!<number>”是什么意思

时间:2019-11-28 18:17:59

标签: c++ c operators logical-operators

c中的!<number>是什么意思。例如!-2!3

cout << !-2;

Output:
0

cout << !3;

Output:
0

3 个答案:

答案 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。整数操作数隐式转换为布尔值。零是假,其他所有数字都是真。