¿Por qué 050
no es igual a 50
en el siguiente fragmento?¿Por qué 050 no es igual a 50 en el siguiente fragmento?
#include <stdio.h>
int main(void) {
int x=050,y=50;
int ans;
ans= x==y ? x+3 : y+7;
printf("%d\n",ans);
}
¿Por qué 050
no es igual a 50
en el siguiente fragmento?¿Por qué 050 no es igual a 50 en el siguiente fragmento?
#include <stdio.h>
int main(void) {
int x=050,y=50;
int ans;
ans= x==y ? x+3 : y+7;
printf("%d\n",ans);
}
Debido 050
se considera octal y 50
se considera decimal.
Así que x = 050
significa básicamente x = 40
.
6.4.4.1/3
Una constante decimal comienza con un dígito diferente de cero y consta de una secuencia de dígitos decimales . Una constante octal consiste en el prefijo 0 seguido opcionalmente por una secuencia de los dígitos del 0 al 7 solamente.
misma razón por la cual 0x50 no es lo mismo que 50 o 050
Sí, es principalmente histórico. C fue desarrollado en máquinas DEC PDP, y tenían 8 registros generales y 8 modos de direccionamiento. Sus instrucciones incluían varios campos de 3 bits para hacer referencia a ellos, por lo que octal era extremadamente natural. Y C fue originalmente diseñado y utilizado para implementar Unix en PDP. Pienso que el modo octal es como un pequeño acento nativo que tienen C y sus derivados, que revela dónde se criaron por primera vez. :-) – SusanW
Porque 050
es una constante octal.
050 se interpreta como octal, con 8 en lugar de 10 como base numérica.
Probablemente quiso decir octal. Octadecimal sería la base 18. –
lo tengo. gracias a todos ... –
@KarlBielefeldt: Gracias, tienes razón. –
050 es 40 en octal. El 0 convierte el número en un literal octal.
Sería educado aceptar la respuesta correcta –