Integrál numerikus típusok (C#-referencia)

Az integrál numerikus típusok egész számokat jelölnek. Minden integrál numerikus típus értéktípus. Ezek szintén egyszerű típusok, és konstansokkal inicializálhatók. Minden integrál numerikus típus támogatja az aritmetikai, bitenkénti logikai, összehasonlítási és egyenlőségi operátorokat.

Az integráltípusok jellemzői

A C# az alábbi előre definiált integráltípusokat támogatja:

C# típus/kulcsszó Tartomány Méret .NET-típus
sbyte -128–127 Aláírt 8 bites egész szám System.SByte
byte 0–255 Aláíratlan 8 bites egész szám System.Byte
short -32 768–32 767 Aláírt 16 bites egész szám System.Int16
ushort 0–65 535 Aláíratlan 16 bites egész szám System.UInt16
int -2 147 483 648–2 147 483 647 Aláírt 32 bites egész szám System.Int32
uint 0–4 294 967 295 Aláíratlan 32 bites egész szám System.UInt32
long -9 223 372 036 854 775 808–9 223 372 036 854 775 807 Aláírt 64 bites egész szám System.Int64
ulong 0–18 446 744 073 709 551 615 Aláíratlan 64 bites egész szám System.UInt64
nint A platformtól függ (futásidőben számítva) Aláírt 32 bites vagy 64 bites egész szám System.IntPtr
nuint A platformtól függ (futásidőben számítva) Aláíratlan 32 bites vagy 64 bites egész szám System.UIntPtr

Az utolsó kettő kivételével az összes táblázatsorban a bal szélső oszlop minden C# típusú kulcsszója a megfelelő .NET-típus aliasa. A kulcsszó és a .NET-típus neve felcserélhető. A következő deklarációk például azonos típusú változókat deklarálnak:

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

nuint A nint táblázat utolsó két sorában lévő típusok natív méretű egész számok. A környezetfüggő kulcsszavak segítségével nuintnint natív méretű egész számokat definiálhat. Ezek 32 bites egész számok, ha 32 bites folyamatban futnak, vagy 64 bites egész számok, ha 64 bites folyamatban futnak. Használhatók interop forgatókönyvekhez, alacsony szintű kódtárakhoz, valamint a teljesítmény optimalizálásához olyan helyzetekben, ahol az egész számokat széles körben használják.

A natív méretű egész számok belsőleg .NET-típusokként és System.UIntPtr.NET-típusokként System.IntPtr jelennek meg. A C# 11-től kezdődően az nint alapul nuint szolgáló típusok aliasai.

Az egyes integráltípusok alapértelmezett értéke nulla, 0.

Minden egyes integráltípus rendelkezik MinValue olyan tulajdonságokkal és MaxValue tulajdonságokkal, amelyek az adott típus minimális és maximális értékét biztosítják. Ezek a tulajdonságok fordítási időállandók, kivéve a natív méretű (nint és nuint) típusokat. A MinValue rendszer futásidőben számítja ki a MaxValue tulajdonságokat natív méretű típusok esetén. Ezeknek a típusoknak a mérete a folyamatbeállításoktól függ.

System.Numerics.BigInteger A struktúra használatával egy aláírt egész számot jelölhet felső vagy alsó határ nélkül.

Egész számkonstansok

Egész számkonstansok lehetnek

  • decimális: előtag nélkül
  • hexadecimális: az vagy 0X előtaggal 0x
  • bináris: az 0b előtaggal 0B

Az alábbi kód az egyes példákat mutatja be:

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

Az előző példa a számjegyelválasztó használatát is szemlélteti._ A számjegyelválasztót sokféle numerikus literállal használhatja.

Az egész szám literáltípusát az utótag határozza meg az alábbiak szerint:

  • Ha a literálnak nincs utótagja, a típus az első az alábbi típusok közül, amelyekben az érték ábrázolható: int, uint, long, ulong.

    Feljegyzés

    A literálok pozitív értékekként vannak értelmezve. A literál 0xFF_FF_FF_FF például a típus számát 4294967295uint jelöli, bár a bitkép megegyezik a int típus számával-1. Ha egy bizonyos típusú értékre van szüksége, adjon meg egy literális értéket erre a típusra. Használja az unchecked operátort, ha egy literális érték nem jeleníthető meg a céltípusban. Például a következőt állítja elő-1: unchecked((int)0xFF_FF_FF_FF) .

  • Ha a literál utótagja U vagy u, akkor a típus az első az alábbi típusok közül, amelyekben az érték ábrázolható: uint, ulong.

  • Ha a literál utótagja L vagy l, akkor a típus az első az alábbi típusok közül, amelyekben az érték ábrázolható: long, ulong.

    Feljegyzés

    Utótagként használhatja a kisbetűt l . Ez azonban egy fordítói figyelmeztetést generál, mert a betű l összetéveszthető a számmal 1. Az egyértelműség kedvéért használja L .

  • Ha a literál utótagja UL, Ul, uL, ul, LULu, lU, vagy lu, akkor a típusa .ulong

Ha egy egész számkonstans értéke meghaladja UInt64.MaxValueaz értéket, cs1021 fordítóhiba lép fel.

Ha egy egész szám konstansának meghatározott típusa és int a literál által képviselt érték a céltípus tartományán belül van, az érték implicit módon konvertálható sbyte, , byte, short, ushortuint, ulongnint vagy nuint:

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

Ahogy az előző példa is mutatja, ha a literál értéke nem a céltípus tartományán belül van, cs0031-es fordítóhiba lép fel.

A leadással az egész számkonstans által képviselt értéket a konstans meghatározott típusától eltérő típussá alakíthatja:

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

Konverziók

Bármely integrál numerikus típust bármely más integrál numerikus típussá alakíthat át. Ha a céltípus a forrástípus összes értékét képes tárolni, az átalakítás implicit módon történik. Ellenkező esetben egy explicit konverzió végrehajtásához egy öntött kifejezést kell használnia. További információ: Beépített numerikus konverziók.

Natív méretű egész számok

A natív méretű egész számok speciális viselkedéssel rendelkeznek, mivel a tárolót a célgépen lévő természetes egész szám mérete határozza meg.

  • Ha futásidőben szeretné lekérni egy natív méretű egész szám méretét, használhatja sizeof()a következőt: . A kódot azonban nem biztonságos környezetben kell lefordítani. Példa:

    Console.WriteLine($"size of nint = {sizeof(nint)}");
    Console.WriteLine($"size of nuint = {sizeof(nuint)}");
    
    // output when run in a 64-bit process
    //size of nint = 8
    //size of nuint = 8
    
    // output when run in a 32-bit process
    //size of nint = 4
    //size of nuint = 4
    

    A statikus IntPtr.Size és UIntPtr.Size a tulajdonságok egyenértékű értékét is lekérheti.

  • Ha futásidőben szeretné lekérni a natív méretű egész számok minimális és maximális értékeit, használja és MaxValue statikus MinValue tulajdonságokként használja a kulcsszavakat és nuint a nint kulcsszavakat, ahogyan az alábbi példában is látható:

    Console.WriteLine($"nint.MinValue = {nint.MinValue}");
    Console.WriteLine($"nint.MaxValue = {nint.MaxValue}");
    Console.WriteLine($"nuint.MinValue = {nuint.MinValue}");
    Console.WriteLine($"nuint.MaxValue = {nuint.MaxValue}");
    
    // output when run in a 64-bit process
    //nint.MinValue = -9223372036854775808
    //nint.MaxValue = 9223372036854775807
    //nuint.MinValue = 0
    //nuint.MaxValue = 18446744073709551615
    
    // output when run in a 32-bit process
    //nint.MinValue = -2147483648
    //nint.MaxValue = 2147483647
    //nuint.MinValue = 0
    //nuint.MaxValue = 4294967295
    
  • Az állandó értékeket a következő tartományokban használhatja:

  • A fordító implicit és explicit konverziókat biztosít más numerikus típusokra. További információ: Beépített numerikus konverziók.

  • A natív méretű egész számok literáljaihoz nincs közvetlen szintaxis. Nincs utótag, amely azt jelzi, hogy a literál egy natív méretű egész szám, például L egy long. Ehelyett más egész számok implicit vagy explicit öntött értékeit is használhatja. Példa:

    nint a = 42
    nint a = (nint)42;
    

C# nyelvspecifikáció

További információt a C# nyelvspecifikációjának alábbi szakaszaiban talál:

Lásd még