¿Por qué este programa da ‘0’ como salida?

Si bien esto es C y no C ++, estoy seguro de que la respuesta es la misma en ambos. La respuesta está en el orden de las operaciones.

Saquemos esto del mundo de posibilidades predefinidas y digamos que estamos trabajando con nuestra propia clase personalizada “Integer” (que existe en Java pero no en C / C ++, así que puedo tomarla prestada para este escenario) y hemos sobrecargado el operador> (probablemente los otros operadores relacionales también, pero para esto al menos el operador>) funcione como uno esperaría para una operación binaria. Entonces, ¿cómo sería una función de operador binario sobrecargado?

boolean Integer :: operator> (const Integer & objInteger) const
{
return (getValue ()> objInteger);
}

Ahora eso funciona para explicar 100> 90, pero ¿qué pasa con el otro? Bueno, encadena. Es esencialmente:

Entero (100) .operador> (90) .operador> (80);

Dado que el operador> no devuelve un entero (o incluso un int), veamos otra regla de C / C ++, que los booleanos pueden ser percibidos / auto-emitidos como enteros y viceversa por esta regla: True es cualquier valor> 0 y False es 0. Si se convierte de boolean a int / short / numeric, se convertirá en el valor 1. Entonces, tenemos verdadero (1) para la primera operación. Consideremos que Integer tiene un constructor de conversión que pasa en un booleano que sigue esa regla o un int o ambos y el resultado ahora se convierte en un nuevo Entero.

Entero (100.operador> (90) = Entero (1);

Entero (1)> 80;

Entero (1) .operador> (80);

Esto debería devolver falso y falso equivale a 0 en términos numéricos.

a = 100> 90> 80;

aquí en ‘=’ y ‘>’, ‘>’ tiene mayor prioridad, pero hay más de un ‘>’, por lo que seguiremos la regla de asociatividad que dice que si hay más de un operador ‘>’ en una línea, evalúe ellos de izquierda a derecha así que aquí viene

(100> 90)> 80;

(1)> 80; // Dado que en C el valor verdadero se define como 1

0; // Dado que cada valor falso se define como 0

ahora a = 0;

y también lo es la respuesta;

(100> 90) da 1 como salida y luego, (1> 80) da 0 como salida. Esto se debe a la operación de izquierda a derecha.
Operadores – Tutoriales de C ++

Creo que porque el operador “>” devuelve un valor booleano, por lo que desde la izquierda 100> 90 devolverá 1, entonces la ecuación será 1> 80, que es falsa, por lo que la salida fue 0.
prueba esto
a = 100> (90> 80);
será 1 porque hará 90> 80 primero tan cierto = 1 y 100> 1 que es cierto.

Dos operadores ‘>’, por lo que ambos tendrán la misma prioridad en ese caso, si uno fuera evaluado primero
Ahora 100> 90 se convertiría en 1 ..
ahora se evaluaría 1> 80, que sería 0 ..
entonces 0 será la salida.

> el operador tiene una asociatividad de izquierda a derecha. Entonces su expresión es realmente equivalente a (100> 90)> 80

Lo que se traduce en 1> 80, que es falso, por lo tanto, obtienes el resultado a = 0

More Interesting

¿Con qué campos de la ciencia será más emocionante trabajar en el futuro cercano?

En 'Figuras ocultas', ¿qué tipo de matemáticas usa Katherine Gobles?

¿Cuáles son todas las aplicaciones conocidas de las técnicas de optimización de colonias de hormigas?

Bajo porcentaje (menos del 60%) en B.Tech Computer Science de una reputada universidad en India. ¿Cómo puedo obtener un trabajo de programación en empresas de primer nivel como Google, Facebook, Microsoft, etc.?

¿Cuál es la diferencia entre teorema y lema?

¿Cuál es el uso de las matemáticas en el mundo real en informática?

¿Cuál es el significado y el beneficio de las variables compartidas en Theano?

¿Qué pasaría si probara P = NP?

¿Qué nivel de matemáticas necesito tener si quiero convertirme en un buen programador gráfico?

¿Cuáles son los fundamentos matemáticos de la inteligencia artificial?

¿Cuál es la diferencia entre Basic Auth, Digest Auth, oAuth1.0 y oAuth2.0? ¿Cuál es un ejemplo de cada uno en el núcleo de PHP?

Cómo responder a las consultas de rango medio de manera eficiente

¿Hay evidencia que respalde que P = NP?

Cómo calcular la varianza esperada en el tiempo (t) dada una deriva y volatilidad conocidas

¿Por qué la informática teórica es tan seca en los trabajos, a excepción de la academia? Aunque todas las empresas se enfrentan a desafíos, no hay una guerra muy reñida contra problemas difíciles, y las personas tienden a elegir la forma fácil de resolver cada problema.