Oft sind Werte positiv bekannt. Zum Beispiel ist die TCP/UDP-Sequenznummer immer ein positiver Wert. Sowohl int
als auch unsigned int
sind groß genug, um sogar die größten 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.Sollte ich jedes Mal "unsigned" verwenden, wenn ich weiß, dass ich nicht signierte Werte verarbeite?
Gibt es Gründe, unsigned
Typ zu verwenden, wenn die Kapazität des normalen signed
Typs ausreicht (und oft mehr als genug)?
Persönlich neige ich dazu, regelmäßige Typen zu verwenden, weil:
int
wahrscheinlich ein bisschen besser lesbar ist alsuint
oderunsigned int
- Ich muss nicht enthalten zusätzliche Header für
UINT
usw. - Ich werde weitere Umwandlungen irgendwo im Programm weiter vermeiden.
Gründe für die Verwendung unsigned
Typ kann ich mir vorstellen:
- Hilfe Compiler generiert besseren Code?
- Hilfe ein anderer Programmierer diese Variable zu verstehen ist unsigned
- vermeiden mögliche Fehler
Einige Gedanken dazu hier: http://embeddedgurus.com/stack-overflow/2009/08/a-tutorial-on- signed-and-unsigned-integers/ – Morwenn
danke, auch ich habe diese Frage gerade jetzt http://stackoverflow.com/questions/12225521/should-unsigned-ints-be-used-if-not-necessary?rq= gefunden 1 – javapowered
Nein. Es gibt einige Argumente gegen die Verwendung von 'unsigned' - Stroustrup spielt darauf an, irgendwo in der Programmiersprache C++ - Lakos ging davon und schrieb ein Kapitel darüber in einem seiner Bücher: langweilig. Beispielprobleme: Wenn Sie die Werte a und b haben, funktioniert 'abs (a - b)' intuitiv für Ints, aber nicht vorzeichenlos; und es ist bemerkenswert, dass Standard-Conversions stillschweigend eingesetzt werden können, so dass die Art von Checks, die Sie möglicherweise von unsigned bekommen, sowieso nicht funktionieren - negative Werte werden lautlos groß und umgekehrt. –