2010-10-12 4 views
10

¿Es -5 un entero literal? ¿O es 5 un literal, y -5 es una expresión con menos unary tomando un literal como argumento? La pregunta surgió cuando me preguntaba cómo codificar los valores enteros más pequeños con signo.¿Es -5 un entero literal?

+4

¿Qué hay de INT_MIN de para "número entero con signo más pequeño"? – Arun

+4

O, como está etiquetado C++, ¿qué tal 'std :: numeric_limits :: min()'? – Praetorian

+0

Miré en los climas. #define INT_MIN (-2147483647 - 1) Interesante :) Gracias –

Respuesta

9

Es un signo menos unitario seguido de 5 como un entero literal. Sí, eso hace que sea algo difícil representar el número entero más pequeño posible en el complemento de dos.

+0

@Jerry Coffin: Si los tipos 'long' y 'unsigned long' son 32 bits, ¿consideraría un compilador conforme a las normas -2147483648 como un unsigned long igual a 2147483648, un error o Comportamiento indefinido? – supercat

+0

@supercat: en C++ no está definido, pero luego en C++ con los tamaños que especifique, '2147483648' no está definido (2.13.1/2) - usted * debe * proporcionar un sufijo' 2147483648u' u obtener ayuda de su implementación. Esperarías que el compilador te haga un favor, y trates '2147483648' como unsigned long, o quizás' long long' si es compatible, o un error si todo lo demás falla: pero no tiene por qué hacerlo. En C99 (nuevamente con esos tamaños), '-2147483648' es un negativo' long long'. Creo que en C89 es un 'unsigned long', lo que causa un final de entretenimiento al migrar de una a otra. –

+0

En C99 con 'int' de 32 bits,' -2147483648' tiene tipo 'unsigned int' y su valor es 2147483648. No hay ninguna razón por la que se convertiría en' long long' porque 2147483648 encaja en 'unsigned int', y luego el se le aplica un operador de negación unario. –

3

Como Jerry Coffin said, el signo menos no es parte del literal. En cuanto a la forma de resolver su última pregunta,

Me preguntaba cómo codificar más pequeño entero con signo valora

Eso es lo que INT_MIN (y similares en limits.h o stdint.h o donde sea) es para.

Si observa cómo se define INT_MIN, probablemente se parezca a (-2147483647 - 1) para solucionar el problema planteado por la pregunta.

+0

Gracias. Ya lo hice. En realidad, no me estoy encontrando con ningún problema. Me preguntaba :)) –

+0

@Armen: Entendido. Supongo que debería decir "el problema planteado por la pregunta" entonces. –

+0

¿Puede decirme qué tipo tiene '-1' y qué tipo tiene' 1' ..? Sé que esta es una pregunta básica, pero estoy teniendo una confusión con respecto a esto. –

Cuestiones relacionadas