Ich denke, es ist ein Fehler das Vorzeichenbit für Integer-Typen in Abschnitt 6.2.6.2 der ISO/IEC 9899:TC3 C standardIst das ein Fehler bei der Definition des Vorzeichenbits für Integer-Typen im C-Standard?
Für signierte Integer-Typen beschreibt, werden die Bits der Objektdarstellung in drei Gruppen unterteilt werden: Wert Bits, Füllbits und das Zeichen Bit. Es muss keine Füllbits geben; es soll genau ein Vorzeichenbit sein. Jedes Bit, das ein Wertbit ist, muss denselben Wert wie das gleiche Bit in der Objektdarstellung des entsprechenden vorzeichenlosen Typs haben (wenn M-Wert-Bits im Typ mit Vorzeichen und N in der Typ ohne Vorzeichen sind, dann M ≤ N)). Wenn das Vorzeichen-Bit Null ist, soll es den resultierenden Wert nicht beeinflussen . Wenn das Vorzeichen-Bit ist, so ist der Wert in einer der folgenden Weisen modifiziert:
- der entsprechende Wert mit Vorzeichenbit 0 negiert wird (Vorzeichen und Größe);
- das Vorzeichenbit hat den Wert - (2^N) (Zweierkomplement);
- das Vorzeichenbit die Wert - (2^N - 1) (einerkomplement)
Im vorigen Abschnitt wurde N definiert die Anzahl der Wertbits in dem signierten Typ zu sein, aber hier ist es die Anzahl der Wert-Bits im unsigned Typ. Der Fall von signed char
mit 8 Bits pro Byte und Zweierkomplement bedeutet, dass das Vorzeichenbit den Wert - (2^8) = -256 statt - (2^7) = -128 hat.
ich denke, die Norm sollte entweder der Schalter M und N in der Anfangs Absatz oder die Definition des Vorzeichenbits ändern M zu verwenden:
- das Vorzeichen-Bit hat den Wert - (2^M) (Zweierkomplement);
- das Vorzeichen-Bit hat den Wert - (2^M - 1) (Ergänzung Einsen)
Habe ich etwas übersehen, oder ist das ein Fehler?
Die gemeinnützige (und wahrscheinlich richtig, soweit Vorsatz betrifft) Interpretation (wenn es M-Wert-Bits in der signierten Typ- und N in dem Typ ohne Vorzeichen, dann M < = N ist) ist dass die erste Definition von * N * in Absatz 1 für den gesamten Abschnitt gelten soll, * außer * für die in Absatz 2 enthaltene Bemerkung in Klammern, wobei * N * (und * M *) vorübergehend eine andere Definition erhält. Aber ja, es ist bestenfalls mehrdeutig. Tadeln Sie es auf Englisch mit solch schlechten variablen Scoping-Regeln. –