¿Puedo usar el operador no en C ++ en valores int?
-
29-09-2019 - |
Pregunta
pregunta extraña, pero alguien me mostró esto, Me preguntaba se puede utilizar el no! operador de int en C ++? (Su extraña para mí).
#include <iostream>
using namespace std;
int main()
{
int a=5, b=4, c=4, d;
d = !( a > b && b <= c) || a > c && !b;
cout << d;
system ("pause");
return 0;
}
Solución
Sí. Para los tipos de integrales, devoluciones !
true
si el operando es cero, y false
lo contrario.
Así !b
aquí sólo significa b == 0
.
Este es un caso particular en que un valor se convierte a un bool
. El !b
se puede ver como !((bool)b)
así que la pregunta es ¿cuál es la "truthness" de b
. En C ++, tipos aritméticos, tipos de puntero y enum se pueden convertir a bool
. Cuando el valor es 0 o nulo, el resultado es false
, de lo contrario es true
(C ++ §4.1.2).
Por supuesto clases personalizadas, incluso puede sobrecargar el operator!
o operator
<< em> tipos se pueden convertir a bool > permitir que el !b
para sus clases. Por ejemplo, std::stream
ha sobrecargado el operator!
y operator void*
para comprobar la failbit, de manera que los modismos como
while (std::cin >> x) { // <-- conversion to bool needed here
...
puede ser utilizado.
(Pero su !( a > b && b <= c) || a > c && !b
código es simplemente críptica.)
Otros consejos
Originalmente, en C (en el que C ++ se basa) no había ningún tipo booleano. En su lugar, se le asigna el valor "verdadero" a cualquier valor que no sea cero y el valor "falso" fue asignado a cualquier cosa que evalúa a cero. Este comportamiento todavía existe en C ++. Así que para una int x
, las expresiones !x
medios "x
no es verdad", que es "x
no distinto de cero", es decir que es verdad si x
es cero.
Puede, !b
es equivalente a (b == 0)
.
La prueba para int es cierto para los no valores cero y falso para valores cero, por lo que no es sólo cierto para los valores cero y falso para los no valores cero.
La acumulación en el operador !
convierte su argumento bool
. Previsto por la norma que existe una conversión de cualquier tipo aritmético (int
, char
, .... float
, double
...) a bool . Si el valor de la fuente es 0 el resultado es true
, de lo contrario es false