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 0x předponou 0X nebo
  • binary: s 0b 0B př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: int uint , , , long ulong .

    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_FF 4294967295 číslo uint -1 int typu. 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 typu unchecked reprezentovat, 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 U hodnota reprezentována: u , uint ulong .

  • 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 L hodnota reprezentována: l , long ulong .

    Poznámka

    Jako příponu můžete použít l malé písmeno. To však vygeneruje upozornění kompilátoru, protože písmeno l může být zaměňováno s číslicí 1 . Pro L přehlednost použijte .

  • Pokud literál má příponu UL , , , , , , nebo , je Ul jeho typ uL ul LU Lu lU lu ulong .

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#:

Viz také