Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What happens when you logical not a float?

Tags:

I assume this just returns an int. Is there anything else going on I should be aware of? C/C++ differences?

float a = 2.5;
!a; // What does this return? Int? Float?
like image 651
Nathan Fig Avatar asked Mar 23 '12 03:03

Nathan Fig


People also ask

What is logical NOT operator?

The logical NOT ( ! ) operator (logical complement, negation) takes truth to falsity and vice versa. It is typically used with boolean (logical) values. When used with non-Boolean values, it returns false if its single operand can be converted to true ; otherwise, returns true .

Which operator does not work with float?

% operator cannot be used with floating point numbers in C & C++.

What is logical not in programming?

The logical NOT operator is represented as the '!' symbol, which is used to reverse the result of any given expression or condition. If the result of an expression is non-zero or true, the result will be reversed as zero or false value.

Is 0.0 A float number?

'' If there is no minus zero, then 0.0 and -0.0 are both interpreted as simply a floating-point zero.


2 Answers

Regarding C++, quoting C++11 §5.3.1/9:

The operand of the logical negation operator ! is contextually converted to bool; its value is true if the converted operand is false and false otherwise. The type of the result is bool.

So what's really relevant here is the behavior of static_cast<bool>(some_float) – quoting §4.12/1:

A prvalue of arithmetic, unscoped enumeration, pointer, or pointer to member type can be converted to a prvalue of type bool. A zero value, null pointer value, or null member pointer value is converted to false; any other value is converted to true. A prvalue of type std::nullptr_t can be converted to a prvalue of type bool; the resulting value is false.

Putting those together, 2.5f is a non-zero value and will consequently evaluate to true, which when negated will evaluate to false. I.e., !a == false.


Regarding C, quoting C99 §6.5.3.3/5:

The result of the logical negation operator ! is 0 if the value of its operand compares unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int. The expression !E is equivalent to (0==E).

I.e. the net result is the same as with C++, excepting the type.

like image 139
ildjarn Avatar answered Oct 31 '22 13:10

ildjarn


From here

A float will be converted to false if its exactly 0.0f,
It will be also true if its not exacly 0.0f!
Inifinity will also be converted to true.

like image 34
cctan Avatar answered Oct 31 '22 15:10

cctan