如果你不是浮动的话,会发生什么?

Nat*_*Fig 25 c c++ floating-point logic logical-operators

我假设这只返回一个int.还有什么事情我应该知道吗?C/C++的差异?

float a = 2.5;
!a; // What does this return? Int? Float?
Run Code Online (Sandbox Code Playgroud)

ild*_*arn 38

关于C++,引用C++11§5.3.1/ 9:

逻辑否定运算符的操作数在!上下文中转换为bool; true如果转换的操作数是false,false则其值为.结果的类型是bool.

所以这里真正重要的是static_cast<bool>(some_float)- 引用§4.12/ 1 的行为:

算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为类型的prvalue bool.将零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.类型std::nullptr_t的prvalue可以转换为类型的prvalue bool; 结果值是false.

将它们放在一起,2.5f是一个非零值,因此将评估true,当否定将评估为false.即,!a== false.


关于C,引用C99§6.5.3.3/ 5:

逻辑否定运算符的结果!是,0如果其操作数的值比较等于0,1则其操作数的值不等于0.结果有类型int.表达式!E相当于(0==E).

即净结果与C++相同,除了类型.

  • @NathanFig:对,C中`!`的结果总是`int`. (3认同)

cct*_*tan 8

这里开始

如果浮点数恰好为0.0f,则浮点数将被转换为false.如果浮点数不是0.0f,
它也将为真!
Inifinity也将转换为true.

  • 我不确定无穷大的否定,所以我在这里查看了输出http://ideone.com/WWoJB#view_edit_box (2认同)