Integrální číselné typy (Referenční příručka jazyka C#)
Celočíselné typy představují celočíselná čísla. Všechny integrální číselné typy jsou hodnotové typy. Jsou to také jednoduché typy a je možné je inicializovat pomocí literálů. Všechny celočíselné typy podporují aritmetickéoperátory , bitové logické operátory, operátory porovnání a rovnosti.
Charakteristiky integrálních typů
Jazyk C# podporuje následující předdefinované integrální typy:
| Typ/klíčové slovo jazyka C# | Rozsah | Velikost | Typ .NET |
|---|---|---|---|
sbyte |
-128 až 127 | 8bitové celé číslo se znaménkem | System.SByte |
byte |
0 až 255 | 8bitové celé číslo bez znaménka | System.Byte |
short |
-32 768 až 32 767 | 16bitové celé číslo se znaménkem | System.Int16 |
ushort |
0 až 65 535 | 16bitové celé číslo bez znaménka | System.UInt16 |
int |
-2 147 483 648 až 2 147 483 647 | 32bitové celé číslo se znaménkem | System.Int32 |
uint |
0 až 4 294 967 295 | 32bitové celé číslo bez znaménka | System.UInt32 |
long |
-9 223 372 036 854 775 808 až 9 223 372 036 854 775 807 | 64bitové celé číslo se znaménkem | System.Int64 |
ulong |
0 až 18 446 744 073 709 551 615 | 64bitové celé číslo bez znaménka | System.UInt64 |
nint |
Závisí na platformě | 32bitové nebo 64bitové celé číslo se znaménkem | System.IntPtr |
nuint |
Závisí na platformě | 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# ze sloupce nejvíce vlevo aliasem pro odpovídající typ .NET. Klíčové slovo a název 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 nuint a v posledních dvou řádcích tabulky jsou celočíselná čísla nativní velikosti. Jsou interně reprezentovány označenými typy .NET, ale v každém případě není klíčové slovo a typ .NET zaměnitelné. Kompilátor poskytuje operace a převody pro a jako celočíselné typy, které neposkytuje pro nint nuint typy ukazatelů a System.IntPtr System.UIntPtr . Další informace najdete v tématu a nint nuint typy.
Výchozí hodnota každého celočíselného typu je nula, 0 . Každý celočíselné typy s výjimkou nativních typů má konstanty a , které poskytují minimální a MinValue MaxValue maximální hodnotu tohoto typu.
Pomocí System.Numerics.BigInteger struktury můžete reprezentovat celé číslo se znaménkem bez horních nebo dolních meze.
Celočíselné literály
Celočíselné literály mohou být
- decimal: bez jakékoli předpony
- hexadecimal: s
0xpředponou0Xnebo - binary: s
0b0Bpředponou nebo (k dispozici v jazyce C# 7.0 a novějším)
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če číslic , který je podporován počínaje jazykem _ C# 7.0. Oddělovač číslic můžete použít se všemi druhy číselných literálů.
Typ celočíselného literálu je určen jeho příponou následujícím způsobem:
Pokud literál nemá žádnou příponu, jeho typ je první z následujících typů, ve kterých může být jeho hodnota reprezentována:
intuint, , ,longulong.Poznámka
Literály se interpretují jako kladné hodnoty. Literál například představuje číslo typu, i když má stejnou bitovou reprezentaci jako
0xFF_FF_FF_FF4294967295číslouint-1inttypu. Pokud potřebujete hodnotu určitého typu, přetypování literálu na tento typ. Pokud hodnotu literálu nelze v cílovém typuuncheckedreprezentovat, použijte operátor . Například vytvoříunchecked((int)0xFF_FF_FF_FF)-1.Pokud je literál přípona nebo , jeho typ je první z následujících typů, ve kterých může být jeho
Uhodnota reprezentována:u,uintulong.Pokud je literál přípona nebo , jeho typ je první z následujících typů, ve kterých může být jeho
Lhodnota reprezentována:l,longulong.Poznámka
Jako příponu můžete použít
lmalé písmeno. To však vygeneruje upozornění kompilátoru, protože písmenolmůže být zaměňováno s číslicí1. ProLpřehlednost použijte .Pokud literál má příponu
UL, , , , , , nebo , jeUljeho typuLulLULulUluulong.
Pokud hodnota reprezentována celočíselným literálem překročí UInt64.MaxValue , dojde k chybě kompilátoru CS1021.
Pokud je určený typ celočíselného literálu a hodnota reprezentována literálem je v rozsahu cílového typu, lze hodnotu implicitně převést na int , , , , , sbyte nebo byte short ushort uint ulong nint 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.
Přetypování můžete použít také k převodu hodnoty reprezentované celočíselným literálem na jiný typ než určený typ literálu:
var signedByte = (sbyte)42;
var longVariable = (long)42;
Převody
Celočíselné typy lze převést na jakýkoli jiný celočíselné typy. Pokud typ cíle může ukládat všechny hodnoty typu zdroje, převod je implicitní. V opačném případě je nutné použít výraz přetypování k provedení explicitního převodu. Další informace najdete v tématu Předdefinování číselných převodů.
specifikace jazyka C#
Další informace najdete v následujících částech specifikace jazyka C#: