Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Celočíselné typy představují celočíselná čísla. Všechny integrální číselné typy jsou hodnotové typy. Integrální typy jsou jednoduché typy a inicializujete je literály. Všechny celočíselné číselné typy podporují aritmetické, bitové logické, porovnání a operátory rovnosti .
Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.
Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.
Návod
Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.
Charakteristiky integrálních typů
Jazyk C# podporuje následující předdefinované integrální typy:
| Typ/klíčové slovo jazyka C# | Rozmezí | Velikost | Typ .NET |
|---|---|---|---|
sbyte |
-128 až 127 | Podepsané 8bitové celé číslo | System.SByte |
byte |
0 až 255 | Celé číslo bez znaménka | System.Byte |
short |
-32 768 až 32 767 | Podepsané 16bitové celé číslo | System.Int16 |
ushort |
0 až 65 535 | Celé číslo bez znaménka | System.UInt16 |
int |
-2 147 483 648 až 2 147 483 647 | Podepsané 32bitové celé číslo | System.Int32 |
uint |
0 až 4 294 967 295 | Neznaménkové 32bitové celé číslo | System.UInt32 |
long |
-9 223 372 036 854 775 808 až 9 223 372 036 854 775 807 | Podepsané 64bitové celé číslo | System.Int64 |
ulong |
0 až 18 446 744 073 709 551 615 | Neznamenkové 64bitové celé číslo | System.UInt64 |
nint |
Závisí na platformě (vypočítané za běhu) | Podepsané 32bitové nebo 64bitové celé číslo | System.IntPtr |
nuint |
Závisí na platformě (vypočítané za běhu) | 32bitové nebo 64bitové celé číslo bez znaménka | System.UIntPtr |
Ve všech řádcích tabulky s výjimkou posledních dvou je každé klíčové slovo typu jazyka C# z levého sloupce alias pro odpovídající typ .NET. Název klíčového slova a typu .NET jsou zaměnitelné. Například následující deklarace deklarují proměnné stejného typu:
int a = 123;
System.Int32 b = 123;
Typy nint v nuint posledních dvou řádcích tabulky jsou celá čísla v nativní velikosti. Pomocí kontextových klíčových slov nint a nuint můžete definovat celá čísla nativní velikosti. Celá čísla nativní velikosti jsou 32bitová celá čísla při spuštění v 32bitovém procesu nebo 64bitových celých čísel při spuštění v 64bitovém procesu. Používejte je pro scénáře spolupráce, knihovny nízké úrovně a pro optimalizaci výkonu ve scénářích, kdy se celočíselná matematika používá široce.
Celočíselné typy nativní velikosti jsou interně reprezentovány jako typy System.IntPtr .NET a System.UIntPtr.
nint A nuint typy jsou aliasy pro podkladové typy.
Výchozí hodnota každého celočíselného typu je nula, 0.
Každý z integrálních typů má MinValue a MaxValue vlastnosti, které poskytují minimální a maximální hodnotu tohoto typu. Tyto vlastnosti jsou konstanty v čase kompilace s výjimkou případu nativních typů velikosti (nint a nuint). Vlastnosti MinValue a MaxValue se počítají během běhu programu pro typy nativní velikosti. Velikosti těchto typů závisí na nastavení procesu.
System.Numerics.BigInteger Struktura slouží k reprezentaci signed integer bez horních nebo dolních hranic.
Celočíselné literály
Celočíselné literály můžou být:
- decimal: bez předpony
-
hexadecimální: s předponou
0xnebo předponou0X -
binární: s
0bnebo0Bpředponou
Následující kód ukazuje příklad každého z nich:
var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;
Předchozí příklad také ukazuje použití _ jako oddělovač číslic. Oddělovač číslic můžete použít se všemi druhy číselných literálů.
Přípona určuje typ celočíselného literálu následujícím způsobem:
Pokud literál nemá žádnou příponu, kompilátor přiřadí typ jako první z následujících typů, ve kterých může být jeho hodnota reprezentována:
int,uint,long,ulong.Poznámka:
Kompilátor interpretuje literály jako kladné hodnoty. Literál
0xFF_FF_FF_FFnapříklad představuje číslo4,294,967,295uinttypu, i když má stejné bitové vyjádření jako číslo-1inttypu. Pokud potřebujete hodnotu určitého typu, přetypujte literál na tento typ.uncheckedOperátor použijte, pokud hodnotu literálu nelze reprezentovat v cílovém typu. Napříkladunchecked((int)0xFF_FF_FF_FF)vytvoří-1.Pokud literál obsahuje nebo
upříponuU, kompilátor přiřadí typ jako první z následujících typů, ve kterých může být jeho hodnota reprezentována:uint,ulong.Pokud literál obsahuje nebo
lpříponuL, kompilátor přiřadí typ jako první z následujících typů, ve kterých může být jeho hodnota reprezentována:long,ulong.Poznámka:
Malá písmena
lmůžete použít jako příponu. Vygeneruje však upozornění kompilátoru,lprotože písmenolmůže být zaměňováno s číslicí1. SloužíLk přehlednosti.Pokud literál obsahuje jeden z
UL, ,LUuLLuUlul,lU, nebolupřípony, kompilátor přiřadí typ jako .ulong
Pokud hodnota reprezentovaná celočíselnou literál překročí UInt64.MaxValue, dojde k chybě kompilátoru CS1021 .
Pokud kompilátor určuje typ celočíselného literálu jako int a hodnota reprezentovaná literálem je v rozsahu cílového typu, může být hodnota implicitně převedena na sbyte, , uintshortbyteushort, ulong, , nint, , nebo :nuint
byte a = 17;
byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
Jak ukazuje předchozí příklad, pokud hodnota literálu není v rozsahu cílového typu, dojde k chybě kompilátoru CS0031 .
Pomocí přetypování můžete také převést hodnotu reprezentovanou celočíselným literálem na typ, který se liší od určeného typu tohoto literálu.
var signedByte = (sbyte)42;
var longVariable = (long)42;
Převody
Jakýkoli celočíselný číselný typ můžete převést na jakýkoli jiný celočíselný číselný typ. Pokud cílový typ může uložit všechny hodnoty zdrojového typu, převod je implicitní. V opačném případě použijte výraz přetypování k provedení explicitního převodu. Další informace naleznete v tématu Předdefinované číselné převody.
Celá čísla s nativní velikostí
Nativní celočíselné typy mají zvláštní chování, protože úložiště odpovídá přirozené celočíselné velikosti na cílovém počítači.
Chcete-li získat velikost celočíselného čísla nativní velikosti v době běhu, použijte
sizeof(). Kód však musí být zkompilován v nebezpečném kontextu. Například: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 = 4Ekvivalentní hodnotu můžete získat také ze statických IntPtr.Size vlastností a UIntPtr.Size vlastností.
Chcete-li získat minimální a maximální hodnoty celých čísel nativní velikosti za běhu, použijte
MinValueaMaxValuejako statické vlastnosti s klíčovými slovynintanuint, jak je znázorněno v následujícím příkladu: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 = 4294967295Zatímco celý rozsah
nintanuintmůže být větší, jsou konstanty času kompilace omezeny na 32bitový rozsah:- Pro
nint: Int32.MinValue do Int32.MaxValue. - Pro
nuint: UInt32.MinValue do UInt32.MaxValue.
- Pro
Kompilátor poskytuje implicitní a explicitní převody na jiné číselné typy. Další informace naleznete v tématu Předdefinované číselné převody.
Pro celočíselné literály v nativní velikosti neexistuje žádná přímá syntaxe. Neexistuje žádná přípona označující, že literál je celé číslo v nativní velikosti, například
Loznačenílong. Místo toho použijte implicitní nebo explicitní přetypování jiných celočíselné hodnoty. Například:nint a = 42 nint a = (nint)42;
Specifikace jazyka C#
Další informace najdete v následujících částech specifikace jazyka C#: