Was ist der Unterschied zwischen "int" und "uint" / "long" und "ulong"?

116

Ich weiß über intund long(32-Bit- und 64-Bit-Zahlen), aber was sind uintund ulong?

Differenz-Engine
quelle

Antworten:

223

Die primitiven Datentypen mit dem Präfix "u" sind vorzeichenlose Versionen mit denselben Bitgrößen. Tatsächlich bedeutet dies, dass sie keine negativen Zahlen speichern können, andererseits können sie positive Zahlen doppelt so groß speichern wie ihre signierten Gegenstücke. Den signierten Gegenstücken wird kein "u" vorangestellt.

Die Grenzen für int (32 Bit) sind:

int: 2147483648 to 2147483647 
uint: 0 to 4294967295 

Und für lange (64 Bit):

long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615
Isak Savo
quelle
12
Es macht Spaß, von Hand zu trainieren. Eine 32-Bit-Variable mit Vorzeichen verwendet 1 Bit für das Vorzeichen (positiv oder negativ), sodass Werte zwischen -2 ^ 31 und + 2 ^ 31 - 1
Jaco Pretorius
Welches ist beim Vergleich von int und uint für die Verwendung machbar?
Arun Prasad
Was ist das C ++ - Äquivalent?
Darkgaze
@JacoPretorius Das ist falsch. 8 Bit int hat einen Bereich von –128 bis 127. Das 9. Bit steht für 256. Mit 8 Bit können Sie also alle Werte bis 255 (9. Wert - 1) darstellen. Der Bereich von -128 bis 127 hat eine Länge von genau 255. Es gibt also kein Bit, das das Vorzeichen enthält. Alle Werte bis 127 sind positiv. Die obigen Werte werden negativ angezeigt. 255 wäre -1. 254 wäre -2 und damit ein Weg nach unten auf 128.
C4d
Ich denke, es ist auch erwähnenswert, dass speziell für int vs uint die vorzeichenlose Ganzzahl nicht CLS-kompatibel ist und es empfohlen wird, int so oft wie möglich zu verwenden.
DB2
38

uintund ulongsind die nicht signierten Versionen von intund long. Das heißt, sie können nicht negativ sein. Stattdessen haben sie einen größeren Maximalwert.

Typ Min Max CLS-konform
int -2,147,483,648 2,147,483,647 Ja
uint 0 4,294,967,295 No.
lang –9.223.372.036.854.775.808 9.223.372.036.854.775.807 Ja
ulong 0 18.446.744.073.709.551.615 Nr

Um ein Literal ohne Vorzeichen in Ihren Quellcode zu schreiben, können Sie das Suffix uoder Uzum Beispiel verwenden 123U.

Sie sollten uint und ulong nicht in Ihrer öffentlichen Benutzeroberfläche verwenden, wenn Sie CLS-konform sein möchten .

Weitere Informationen finden Sie in der Dokumentation:

Übrigens gibt es auch Short und Ushort und Byte und Sbyte .

Mark Byers
quelle
Das ist interessant - was meinst du mit CLS-konform? Der Link führt zur MSDN-Dokumentation für int. Wenn mit "CLS" C # -Sprachenspezifikation gemeint ist, dann verstehe ich das nicht - die Spezifikation beschreibt sowohl uint als auch ulong klar (Abschnitt 1.3)
Isak Savo
1
@Isak Savo: Es ist wichtig, CLS-kompatibel zu sein, wenn Sie eine Schnittstelle schreiben, die von anderen .NET-Sprachen als C # verwendet werden kann.
Mark Byers
Neugierig, dass Sie kurz und kurz erwähnen, aber Byte und Byte weglassen :)
Roman
10

ubedeutet unsigned, so ulongist eine große Zahl ohne Vorzeichen. Sie können einen größeren Wert in ulongals speichern long, aber keine negativen Zahlen sind zulässig.

Ein longWert wird in 64-Bit gespeichert, wobei die erste Ziffer anzeigt, ob es sich um eine positive / negative Zahl handelt. während ulongist auch 64-Bit, mit allen 64-Bit, um die Nummer zu speichern. Das Maximum von ulong ist also 2 (64) -1, während long 2 (63) -1 ist.

Cheng Chen
quelle
9

Der Unterschied besteht darin, dass die Datentypen uintund ulongohne Vorzeichen sind, was bedeutet, dass der Bereich unterschiedlich ist: Sie akzeptieren keine negativen Werte:

int range: -2,147,483,648 to 2,147,483,647
uint range: 0 to 4,294,967,295

long range: 9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
ulong range: 0 to 18,446,744,073,709,551,615
Srodriguez
quelle