Int16_t está garantizada para ser firmado?
Pregunta
Es el tipo int16_t
declarada en <stdint.h>
garantizada para ser firmado, o es sólo supuesta ??em> para ser firmado? Supongo que tendría que ser firmado, pero, sorprendentemente, me parece que no puede encontrar ninguna evidencia dura (es decir, las referencias a la especificación) que menciona explícitamente en cualquier lugar.
Podría alguien confirmar esto de cualquier manera? Te lo agradecería referencias específicas a la especificación, si es posible.
Solución
n1256 7.18.1p1 dice:
Cuando typedef nombres que sólo difieren en la ausencia o presencia de la inicial T se definen, se denotará correspondiente firmado y sin firmar tipos como se describe en 6.2.5; un aplicación que proporciona uno de estos tipos correspondientes también deberán proporcionar el otro.
Dado que hay un int16_t
y una uint16_t
, por lo tanto, se firmó el int16_t
.
O de hecho 7.18.1.1p1:
El nombre typedef intN_t designa una entero de tipo con un ancho de N, no bits de relleno, y complemento a dos representación. Por lo tanto, int8_t denota una entero de tipo con una anchura de exactamente 8 bits.
que es más explícito al respecto.
EDIT: aunque estrictamente hablando, int16_t no está garantizada para ser firmado en el sentido de que no está garantizado que existen . Si tiene CHAR_BIT == 9, por ejemplo, no puede haber un tipo int16_t
.
Otros consejos
Sí, está garantizada int16_t para ser firmado complemento a dos por la especificación ISO.