Al comparar un tipo más grande que int
con una constante entera, ¿debo colocar la constante a la izquierda o a la derecha para garantizar que se realice la comparación correcta?
int64_t i = some_val;
if (i == -1)
o debería ser:
if (-1 == i)
¿Hay alguna circunstancia en la que cualquiera de los casos no sea idéntico a la comparación con -1LL
(donde int64_t
es long long
)?
No importa si lo pones del lado derecho o del lado izquierdo; los ==
El operador es completamente simétrico.
Si ambos operandos al ==
operador tiene tipo aritmético, como en este caso, entonces se aplican las “conversiones aritméticas usuales” (C99 §6.5.9). En este caso, la regla que se aplica es:
Si ambos operandos tienen tipos de enteros con signo o ambos tienen tipos de enteros sin signo, el operando con el tipo de menor rango de conversión de enteros se convierte al tipo de operando con mayor rango. (C99 §6.3.1.8)
Entonces el -1 se convierte en int64_t
. -1LL
No hace diferencia.
una gran etiqueta Yoda fue 🙂
– Josh Petit
24/09/2012 a las 19:32