Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

108
Vistas
¿Por qué -32768 tiene un tipo firmado largo en la siguiente plataforma?

Suponga que en una plataforma, el valor mínimo con signo es −2^15 = −32768 y el valor máximo es 2^15 −1 = 32767. La constante 32768 entonces no encaja en el signed y, por lo tanto, tiene signed long . Como consecuencia, la expresión -32768 tiene el tipo signed long . Por lo tanto, el valor mínimo del tipo signed en dicha plataforma no se puede escribir como una constante literal.

De Modern C de Jens Gustedt.

Es trivial entender por qué 32768 tiene signed long , pero ¿por qué -32768 también tiene una signed long y no está signed , dado el valor mínimo signed de -32768?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Porque -32768 es el literal positivo 32768 (que no cabe en un valor de 16 bits y, por lo tanto, debe representarse con el siguiente tipo más grande), al que se le aplica el menos unario (que no cambia el tipo).

Si escribe, por ejemplo ( ( - 32767 ) - 1 ), obtiene su constante en tipo int.

over 4 years ago · Santiago Trujillo Denunciar

0

Si int es un tipo de 16 bits en su plataforma, entonces 32768 no encaja en ella. Por lo tanto, 32768 debe tener el siguiente tipo más grande que es long . -32768 no es un literal entero negativo sino un menos unario aplicado al literal 32768 . Dado que 32768 es long , también lo es -32768

Esto es exactamente lo mismo que

  • -9'223'372'036'854'775'808LL no está firmado
  • ¿Por qué el int más pequeño, −2147483648, tiene el tipo 'largo'?
  • ¿Por qué MSVC elige un tipo largo como -2147483648?
over 4 years ago · Santiago Trujillo Denunciar

0

-32768 no es en realidad un literal entero. Es el literal entero 32768 con el operador - unario aplicado.

Como en este sistema el valor 32768 está fuera del rango de int , la constante 32768 tiene tipo long . Aplicar el unario - a un valor de tipo long da como resultado una expresión de tipo long , por lo tanto -32768 tiene tipo long .

Una forma de obtener el valor -32768 con el tipo int , la expresión adecuada sería -32767 - 1 . La constante entera 32767 tiene tipo int . Aplicar el operador unario - todavía nos da un valor en el rango de int , luego restar 1 nos da una expresión de tipo int con valor -32768.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda