2011-01-09 5 views
3

Ist der int16_t Typ in <stdint.h>garantiert unterzeichnet werden, oder ist es nur vermeintlich unterzeichnet werden? Ich würde annehmen, dass es unterschrieben werden müsste, aber überraschenderweise kann ich keine konkreten Beweise finden (d. H. Verweise auf die Spezifikation), die das überall explizit erwähnen.Ist int16_t garantiert signiert?

Kann jemand dies bestätigen? Ich würde sehr gerne spezifische Referenzen auf die Spezifikation schätzen, wenn überhaupt möglich.

Antwort

6

n1256 7.18.1p1 sagt:

Wenn typedef-Namen nur in die Abwesenheit oder Anwesenheit des ursprünglichen u definiert sind unterschiedlich, sie müssen entsprechende vorzeichenbehaftete und vorzeichenlose Typen bezeichnen, wie in 6.2 beschrieben .5; Eine Implementierung, die eine dieser entsprechenden Typen bietet, soll auch die andere liefern.

Da es ein int16_t ist und ein uint16_t wird die int16_t daher unterzeichnet.

Oder tatsächlich 7.18.1.1p1:

Der typedef Name intN_t bezeichnet einen signierten Integer-Typen mit einer Breite N, ohne Stopfbit und ein Zweier-Komplement Darstellung. Somit bezeichnet int8_t einen vorzeichenbehafteten ganzzahligen Typ mit einer Breite von genau 8 Bits.

was ist genauer darüber.

EDIT: obwohl genau gesagt, int16_t ist nicht garantiert in dem Sinne, dass es nicht garantiert gibt es. Wenn Sie beispielsweise CHAR_BIT == 9 haben, kann kein int16_t Typ vorhanden sein.

+3

Das Thema wird in 7.18.1.1 p1 ausführlicher behandelt: "Der Typdef-Name intN_t bezeichnet einen Ganzzahl-Typ mit Vorzeichen mit der Breite N, keinen Füllbits und einer Zweierkomplementdarstellung." –

+2

"Wenn Sie zum Beispiel' CHAR_BIT == 9' haben, könnte der Typ 'int16_t' nicht vorhanden sein. " sollte lauten "Wenn Sie zum Beispiel' CHAR_BIT == 9' haben, kann ** kein ** 'int16_t'-Typ sein." –

+0

@R .. Ja, sieht aus wie du hast Recht. Ich dachte, es könnte einen 18-Bit-Typ mit 2 Füllbits geben, aber Füllbits sind in intN_t-Typen ausdrücklich nicht erlaubt. –

Verwandte Themen