Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az integrál numerikus típusok egész számokat jelölnek. Minden integrál numerikus típus értéktípus. Az integráltípusok 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.
A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.
A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.
Jótanács
Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.
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ípusa |
|---|---|---|---|
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 .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;
A táblázat utolsó két sorában lévő nint és nuint típusok natív méretű egész szám típusok. A környezetfüggő kulcsszavak segítségével nintnuintnatív méretű egész számokat definiálhat. A natív méretű egész számok 32 bites egész számok, amikor 32 bites folyamatban futnak, vagy 64 bites egész számok, amikor 64 bites folyamatban futnak. Használja őket interop-forgatókönyvekhez, alacsony szintű kódtárakhoz, és optimalizálja a teljesítményt 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 System.IntPtr és System.UIntPtr .NET típusokként jelennek meg. A nint típusok a nuint mögöttes 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 és MaxValue tulajdonságok futásidőben kerülnek kiszámításra 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
Az egész számkonstansok a következők lehetnek:
- decimális: előtag nélkül
-
hexadecimális: a
0xvagy0Xelőtaggal -
bináris: az
0bvagy0Belőtaggal
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 _. A számjegyelválasztót sokféle numerikus literállal használhatja.
Az utótag az egész szám literáltípusát az alábbiak szerint határozza meg:
Ha a literálnak nincs utótagja, a fordító az alábbi típusok közül az elsőként rendeli hozzá a típust, amelyben az értéke megjeleníthető:
int,uint, ,longulong.Megjegyzés:
A fordító a literálokat pozitív értékként értelmezi. A literál
0xFF_FF_FF_FFpéldául a típus számát4,294,967,295uintjelöli, bár a bitkép megegyezik a-1típus számávalint. Ha egy bizonyos típusú értékre van szüksége, adjon meg egy literális értéket erre a típusra. Használja azuncheckedoperá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őunchecked((int)0xFF_FF_FF_FF):-1.Ha a literál tartalmazza az utótagot vagy
Uazuutótagot, a fordító az alábbi típusok közül az elsőként rendeli hozzá a típust, amelyben az érték megjeleníthető:uint,ulong.Ha a literál tartalmazza az utótagot vagy
Lazlutótagot, a fordító az alábbi típusok közül az elsőként rendeli hozzá a típust, amelyben az érték megjeleníthető:long,ulong.Megjegyzés:
Utótagként használhatja a kisbetűt
l. Azonban egy fordító figyelmeztetést generál,lmert a betűlösszetéveszthető a számjegykel1. Az egyértelműség kedvéért használjaL.Ha a literál az egyik
UL,Ul, ,uLul,LU,LulU, vagyluutótagot tartalmazza, a fordító a típustulonga következőképpen rendeli hozzá.
Ha egy egész számkonstans értéke meghaladja UInt64.MaxValueaz értéket, cs1021 fordítóhiba lép fel.
Ha a fordító meghatározza egy egész szám literáltípusát, int és 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ó a következővésbyte: , byte, , shortushort, uint, ulong, vagy nintnuint:
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 explicit átalakítást hajthat végre egy öntött kifejezéssel . 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ésűek, mivel a tároló megegyezik a célgépen található természetes egész szám méretével.
Ha futásidőben szeretné lekérni egy natív méretű egész szám méretét, használja a következőt
sizeof(): . A kódot azonban nem biztonságos környezetben kell lefordítani. Például: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 = 4A 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 a
MinValueésMaxValuestatikus tulajdonságokat anintésnuintkulcsszavakkal, 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 = 4294967295Bár a teljes tartomány
nintnagyobb lehet,nuinta fordítási idő állandói 32 bites tartományra korlátozódnak:- For
nint: Int32.MinValue to Int32.MaxValue. - For
nuint: UInt32.MinValue to UInt32.MaxValue.
- For
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 jelzi, hogy egy literál natív méretű egész szám, mint például a
Legylongjelez. Használjon implicit vagy explicit módon más egész számértékeket. Például: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: