Pregunta

Es el tipo int16_t declarada en <stdint.h> garantizada para ser firmado, o es sólo supuesta 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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top