Unterzeichnung - Signedness

In der Computertechnik ist die Vorzeichen eine Eigenschaft von Datentypen, die Zahlen in Computerprogrammen darstellen. Eine numerische Variable ist , signiert , wenn sie beide darstellen können positive und negative Zahlen und unsigned wenn es nur darstellen kann nicht negative Zahlen (null oder positive Zahlen).

Da vorzeichenbehaftete Zahlen negative Zahlen darstellen können, verlieren sie einen Bereich positiver Zahlen, der nur mit vorzeichenlosen Zahlen gleicher Größe (in Bits) dargestellt werden kann, da etwa die Hälfte der möglichen Werte nicht positive Werte sind, während der jeweilige vorzeichenlose Typ dediziert alle möglichen Werte in den positiven Zahlenbereich.

Zum Beispiel kann ein Zweierkomplement signierten 16-Bit - Ganzzahl , die Werte halten kann -32768 bis 32767 einschließend, während eine 16 - Bit - Ganzzahl ohne Vorzeichen der Werte 0 bis halten 65535 . Bei dieser Methode der Vorzeichendarstellung gibt das Bit ganz links ( höchstwertiges Bit ) an, ob der Wert positiv oder negativ ist (0 für positiv, 1 für negativ).

In Programmiersprachen

Bei den meisten Architekturen gibt es in der Maschinensprache keine Unterscheidung zwischen signierten und unsignierten Typen . Trotzdem setzen arithmetische Befehle normalerweise unterschiedliche CPU-Flags, wie beispielsweise das Übertragsflag für vorzeichenlose Arithmetik und das Überlaufflag für vorzeichenbehaftete. Diese Werte können durch nachfolgende Verzweigungs- oder Rechenbefehle berücksichtigt werden.

Die Programmiersprache C implementiert zusammen mit ihren Derivaten eine Vorzeichenbetrachtung für alle Integer-Datentypen sowie für "character" . Bei Integers definiert der unsigned- Modifizierer den Typ, der vorzeichenlos sein soll. Der Standard integer Signedness ist signiert, aber explizit mit eingestellt werden unterzeichnet Modifikator. Im Gegensatz dazu deklariert der C-Standard signed char , unsigned char und char als drei verschiedene Typen, legt jedoch fest, dass alle drei dieselbe Größe und Ausrichtung haben müssen. Außerdem muss char denselben numerischen Bereich haben wie entweder signed char oder unsigned char , die Wahl hängt jedoch von der Plattform ab. Integer - Literale können mit gemacht unsigned werden U - Suffix. Zum Beispiel ergibt 0x FFFFFFFF -1, aber 0xFFFFFFFFU ergibt 4.294.967.295 für 32-Bit-Code.

Compiler Ausgabe oft eine Warnung , wenn Vergleiche zwischen mit und ohne Vorzeichen Zahlen oder wenn man werfen auf der anderen Seite . Dies sind potenziell gefährliche Operationen, da die Bereiche der signierten und unsignierten Typen unterschiedlich sind.

Siehe auch

Externe Links

  • "Übersicht über numerische Typen" . MySQL 5.0-Referenzhandbuch . mysql.com. 2011 . Abgerufen am 6. Januar 2012 .
  • "Integer Conversion Rules verstehen" , CERT C Coding Standard , Computer Emergency Response Team , abgerufen am 31. Dezember 2015