2011-06-15 11 views
8

Ok ... Así que tuve una idea tonta e intenté poner el valoren un int, solo curiosidad por ver qué pasaría, asumí que cuando imprimiera el valor obtendría 123, pero en cambio obtuve 83. .. ¿Alguna idea de por qué? ¿Qué sucede dentro del compilador/memoria que hace que este valor se convierta en 83?¿Qué significa cuando una constante numérica en C/C++ tiene el prefijo 0?

Intenté esto en C++ y C con el compilador de GCC y también intenté con un flotador que arrojó los mismos resultados.

Respuesta

2

es una constante octal (base 8). 83 es ​​el equivalente decimal.

8
+0

+1 por hacerme jajaja - y enlace útil – CurtisJC

+1

La diversión es mejor que el desconcierto. :-) –

+0

'Para escribir números en octal, anteceda el valor con 0. ... Para escribir números en octal, preceda el valor con un 0x o 0X. 'doh! – mrk

3

Esto es porque cualquier número que comience con 0 como este se considera en octal (base 8) no decimal.

Lo mismo si se comienza con 0x obtendrá hexadecimal

+0

+1 en información sobre hex: puede ser útil – CurtisJC

3

el 0 indica un número "octal". Entonces se convierte en 1 * 8^2 + 2 * 8^1 + 3 * 8^0 = 83

+0

Es un '0' (cero), no un' O' inicial (o). –

+0

Por supuesto que estás en lo cierto, me acabo de dar cuenta de mi error y volví a editar. Tentado de darme un -1 por estupidez :-) –

1

De acuerdo con el estándar C++ en [lex.icon] literales enteros se pueden dividir en 3 tipos: literales decimales , literales octales y literales hexadecimales, cada uno de los cuales pueden tener un sufijo para signess y la longitud de tipo

literales decimales deben comenzar con un dígito diferente a cero, mientras que los literales octales empiezan con 0 y hexadecimales literales tener 0x y 0X, después de la prefix (para octal-literales y hexadecimales-literales) cualquier dígito que no sea representable en la base correspondiente debe desencadenar un error de compilación (como 09 que causa error C2041: illegal digit '9' for base '8' y en otro compilador prog.cpp:6:15: error: invalid digit "9" in octal constant), ya que Si el literal entero no es representable, el programa se vuelve mal formado.

Cuestiones relacionadas