Sollte ich jedes Mal "unsigned" verwenden, wenn ich weiß, dass ich nicht signierte Werte verarbeite?

9

Oft ist bekannt, dass Werte positiv sind. Zum Beispiel ist die TCP / UDP-Sequenznummer immer ein positiver Wert. Sowohl int als auch unsigned int sind groß genug, um sogar die größte sequence number zu speichern, so dass ich jeden dieser Typen verwenden kann. Es gibt viele andere Beispiele, bei denen bekannt ist, dass Werte positiv sind.

Gibt es Gründe dafür, unsigned type zu verwenden, wenn die Kapazität des regulären signed type ausreichend ist (und oft mehr als genug)?

Persönlich tendiere ich dazu, normale Typen zu verwenden, weil:

  • int ist wahrscheinlich ein wenig lesbarer als uint oder unsigned int
  • Ich brauche keine zusätzlichen Header für UINT etc.
  • Ich werde zusätzliche Casts irgendwo im Programm vermeiden

Gründe für die Verwendung von unsigned type kann ich mir vorstellen:

  • help compiler generiert besseren Code?
  • hilft einem anderen Programmierer zu verstehen, dass die Variable nicht signiert ist
  • Vermeide mögliche Fehler (zum Beispiel wenn int dem UINT-Compiler zugewiesen ist, wird wahrscheinlich ein Fehler bei der Kompilierung generiert und wir sollten überprüfen, dass der von uns zugewiesene Wert nicht negativ ist)
javapowered 24.04.2013, 09:34
quelle

1 Antwort

1

Ein Grund ist, dass der Vergleich von vorzeichenbehafteten und vorzeichenlosen Zahlen zu überraschenden Ergebnissen führen kann. In C und (denke ich) C ++ bewirkt der Vergleich von vorzeichenbehafteten und vorzeichenlosen Zahlen, dass die vorzeichenbehaftete Zahl als vorzeichenlos interpretiert wird. Wenn der vorzeichenbehaftete Wert negativ ist, wird ein vorzeichenloser Wert einen GRÖSSEREN Wert ergeben als eine vorzeichenlose Zahl, was nicht gewünscht ist. In dieser Frage finden Sie ein Beispiel in Objective-C, das die gleichen Konvertierungsregeln wie C verwendet.

    
Caleb 24.04.2013 09:49
quelle

Tags und Links