¿Por qué 050
no es igual a 50
en el siguiente fragmento de código?
#include int main(void) { int x=050,y=50; int ans; ans= x==y ? x+3 : y+7; printf("%d\n",ans); }
Porque 050
se considera octal y 50
se considera decimal.
Entonces x = 050
significa básicamente x = 40
.
6.4.4.1/3
Una constante decimal comienza con un dígito distinto de cero y consiste en una secuencia de dígitos decimales. Una constante octal consiste en el prefijo 0 seguido opcionalmente por una secuencia de los dígitos 0 a 7 solamente.
050 se interpreta como octal, con 8 en lugar de 10 como la base numérica.
misma razón por la que 0x50 no es lo mismo que 50 o 050
Porque 050
es una constante octal.
050 es 40 en octal. El 0 convierte el número en un literal octal.