¿Por qué 050 no es igual a 50 en el siguiente fragmento de código?

¿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

  • 50 – base 10
  • 0x50 – base 16
  • 050 – base 8 (nunca he visto la necesidad de usar esto, nunca)

Porque 050 es una constante octal.

050 es 40 en octal. El 0 convierte el número en un literal octal.