Integrale numerische Typen (C#-Referenz)Integral numeric types (C# reference)

Die integralen numerischen Typen stellen ganze Zahlen dar.The integral numeric types represent integer numbers. Alle integralen numerischen Typen sind Werttypen.All integral numeric types are value types. Sie sind auch einfache Typen und können mit Literalen initialisiert werden.They are also simple types and can be initialized with literals. Alle integralen numerischen Typen unterstützen arithmetic-, bitwise logical-, comparison- and equality-Operatoren.All integral numeric types support arithmetic, bitwise logical, comparison, and equality operators.

Merkmale der integralen TypenCharacteristics of the integral types

C# unterstützt die folgenden vordefinierten integralen Typen:C# supports the following predefined integral types:

C#-Typ/SchlüsselwortC# type/keyword BereichRange GrößeSize .NET-Typ.NET type
sbyte –128 bis 127-128 to 127 Ganze 8-Bit-Zahl mit VorzeichenSigned 8-bit integer System.SByte
byte 0 bis 2550 to 255 8-Bit-Ganzzahl ohne VorzeichenUnsigned 8-bit integer System.Byte
short –32.768 bis 32.767-32,768 to 32,767 Ganze 16-Bit-Zahl mit VorzeichenSigned 16-bit integer System.Int16
ushort 0 bis 65.5350 to 65,535 16-Bit-Ganzzahl ohne VorzeichenUnsigned 16-bit integer System.UInt16
int -2,147,483,648 bis 2,147,483,647-2,147,483,648 to 2,147,483,647 Eine 32-Bit-Ganzzahl mit VorzeichenSigned 32-bit integer System.Int32
uint 0 bis 4.294.967.2950 to 4,294,967,295 32-Bit Ganzzahl ohne VorzeichenUnsigned 32-bit integer System.UInt32
long -9,223,372,036,854,775,808 bis 9,223,372,036,854,775,807-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 64-Bit-Ganzzahl mit VorzeichenSigned 64-bit integer System.Int64
ulong 0 bis 18.446.744.073.709.551.6150 to 18,446,744,073,709,551,615 64-Bit-Ganzzahl ohne VorzeichenUnsigned 64-bit integer System.UInt64

In der obigen Tabelle ist jedes C#-Typschlüsselwort aus der äußerst linken Spalte ein Alias für den entsprechenden .NET-Typ.In the preceding table, each C# type keyword from the leftmost column is an alias for the corresponding .NET type. Sie können synonym verwendet werden.They are interchangeable. In den folgenden Deklarationen werden beispielsweise Variablen des gleichen Typs deklariert:For example, the following declarations declare variables of the same type:

int a = 123;
System.Int32 b = 123;

Der Standardwert jedes integralen Typs ist Null (0).The default value of each integral type is zero, 0. Die einzelnen integralen Typen verfügen jeweils über die Konstanten MinValue und MaxValue, die den minimalen und maximalen Wert des Typs angeben.Each of the integral types has the MinValue and MaxValue constants that provide the minimum and maximum value of that type.

Verwenden Sie die System.Numerics.BigInteger-Struktur, um eine ganze Zahl mit Vorzeichen ohne obere oder untere Grenzen darzustellen.Use the System.Numerics.BigInteger structure to represent a signed integer with no upper or lower bounds.

GanzzahlenliteralInteger literals

Ganzzahlenliterale können die folgenden Typen aufweisen:Integer literals can be

  • Dezimal : ohne Präfixdecimal: without any prefix
  • Hexadezimal: mit dem Präfix 0x oder 0Xhexadecimal: with the 0x or 0X prefix
  • Binär: mit dem Präfix 0b oder 0B (verfügbar in C# 7.0 und höher)binary: with the 0b or 0B prefix (available in C# 7.0 and later)

Der folgende Code zeigt ein Beispiel für jeden Typ:The following code demonstrates an example of each:

var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;

Das vorherige Beispiel zeigt auch die Verwendung von _ als Zifferntrennzeichen, das ab C# 7.0 unterstützt wird.The preceding example also shows the use of _ as a digit separator, which is supported starting with C# 7.0. Sie können das Zifferntrennzeichen mit allen Arten numerischer Literale verwenden.You can use the digit separator with all kinds of numeric literals.

Der Typ eines integralen Literals wird wie folgt durch sein Suffix bestimmt:The type of an integer literal is determined by its suffix as follows:

  • Wenn das Literal kein Suffix besitzt, ist sein Typ der erste dieser Typen, in dem sein Wert dargestellt werden kann: int, uint, long, ulong.If the literal has no suffix, its type is the first of the following types in which its value can be represented: int, uint, long, ulong.

  • Wenn das Literal das Suffix U oder u aufweist, ist sein Typ der erste dieser Typen, in dem sein Wert dargestellt werden kann: uint, ulong.If the literal is suffixed by U or u, its type is the first of the following types in which its value can be represented: uint, ulong.

  • Wenn das Literal das Suffix L oder l aufweist, ist sein Typ der erste dieser Typen, in dem sein Wert dargestellt werden kann: long, ulong.If the literal is suffixed by L or l, its type is the first of the following types in which its value can be represented: long, ulong.

    Hinweis

    Sie können den Kleinbuchstaben l als Suffix verwenden.You can use the lowercase letter l as a suffix. Allerdings erzeugt dies eine Compilerwarnung, weil der Buchstabe l leicht mit der Zahl 1 verwechselt werden kann.However, this generates a compiler warning because the letter l can be confused with the digit 1. Verwenden Sie aus Gründen der Klarheit L.Use L for clarity.

  • Wenn das Literal das Suffix UL, Ul, uL, ul, LU, Lu, lU oder lu aufweist, ist sein Typ ulong.If the literal is suffixed by UL, Ul, uL, ul, LU, Lu, lU, or lu, its type is ulong.

Wenn der von einem Integer-Literal dargestellte Wert UInt64.MaxValue überschreitet, tritt der Compilerfehler CS1021 auf.If the value represented by an integer literal exceeds UInt64.MaxValue, a compiler error CS1021 occurs.

Wenn der festgelegte Typ eines Integerliterals int lautet, und der vom Literal dargestellte Wert innerhalb des Bereichs des Zieltyps liegt, kann der Wert implizit in sbyte, byte, short, ushort, uint oder ulong konvertiert werden:If the determined type of an integer literal is int and the value represented by the literal is within the range of the destination type, the value can be implicitly converted to sbyte, byte, short, ushort, uint, or ulong:

byte a = 17;
byte b = 300;   // CS0031: Constant value '300' cannot be converted to a 'byte'

Wie das vorherige Beispiel zeigt, tritt der Compilerfehler CS0031 auf, wenn der Wert des Literals nicht innerhalb des Bereichs des Zieltyps liegt.As the preceding example shows, if the literal's value is not within the range of the destination type, a compiler error CS0031 occurs.

Sie können auch eine Umwandlung verwenden, um den Wert, der durch ein Ganzzahlliteral dargestellt wird, in einen anderen Typ als den festgelegten Literaltyp zu konvertieren:You can also use a cast to convert the value represented by an integer literal to the type other than the determined type of the literal:

var signedByte = (sbyte)42;
var longVariable = (long)42;

KonvertierungenConversions

Sie können beliebige ganzzahlige numerische Typen in beliebige andere ganzzahlige numerische Typen konvertieren.You can convert any integral numeric type to any other integral numeric type. Wenn der Zieltyp alle Werte des Quelltyps speichern kann, handelt es sich um eine implizite Konvertierung.If the destination type can store all values of the source type, the conversion is implicit. Andernfalls müssen Sie einen Cast-Ausdruck verwenden, um eine explizite Konvertierung durchzuführen.Otherwise, you need to use a cast expression to perform an explicit conversion. Weitere Informationen finden Sie unter Integrierte numerische Konvertierungen (C#-Referenz) (Integrierte numerische Konvertierungen).For more information, see Built-in numeric conversions.

C#-SprachspezifikationC# language specification

Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation:For more information, see the following sections of the C# language specification:

Siehe auchSee also