Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Typy liczb całkowitych reprezentują liczby całkowite. Wszystkie typy liczb całkowitych są typami wartości. Typy całkowite są prostymi typami i mogą być inicjowane literałami. Wszystkie typy liczb całkowitych obsługują operatory arytmetyczne, logiczne bitowe, porównania i równości .
Cechy typów całkowitych
Język C# obsługuje następujące wstępnie zdefiniowane typy całkowite:
| Typ/słowo kluczowe języka C# | Zakres | Rozmiar | Typ platformy .NET |
|---|---|---|---|
sbyte |
-128 do 127 | Podpisana 8-bitowa liczba całkowita | System.SByte |
byte |
Od 0 do 255 | Niepodpisane 8-bitowe liczby całkowite | System.Byte |
short |
-32,768 do 32,767 | Podpisana 16-bitowa liczba całkowita | System.Int16 |
ushort |
Od 0 do 65 535 | Niepodpisane 16-bitowe liczby całkowite | System.UInt16 |
int |
-2,147,483,648 do 2,147,483,647 | Podpisana 32-bitowa liczba całkowita | System.Int32 |
uint |
od 0 do 4294 967 295 | Liczba 32-bitowa bez znaku | System.UInt32 |
long |
-9,223,372,036,854,775,808 do 9,223,372,036,854,775,807 | Podpisana 64-bitowa liczba całkowita | System.Int64 |
ulong |
od 0 do 18,446,744,073,709,551,615 | 64-bitowa liczba całkowita bez znaku | System.UInt64 |
nint |
Zależy od platformy (obliczanej podczas działania) | Podpisana 32-bitowa lub 64-bitowa liczba całkowita | System.IntPtr |
nuint |
Zależy od platformy (obliczanej podczas działania) | Liczba całkowita bez znaku 32-bitowego lub 64-bitowego | System.UIntPtr |
We wszystkich wierszach tabeli z wyjątkiem ostatnich dwóch, każde słowo kluczowe typu C# z lewej kolumny jest aliasem odpowiedniego typu .NET. Nazwa słowa kluczowego oraz nazwa typu .NET są zamienne. Na przykład następujące deklaracje deklarują zmienne tego samego typu:
int a = 123;
System.Int32 b = 123;
Typy nint i nuint w dwóch ostatnich wierszach tabeli są liczbami całkowitymi o rozmiarze natywnym. Można użyć kontekstowych słów kluczowych nint i nuint do zdefiniowania liczb całkowitych o rozmiarze natywnym. Liczby całkowite o rozmiarze natywnym są 32-bitowymi liczbami całkowitymi podczas uruchamiania w procesie 32-bitowym lub 64-bitowych liczb całkowitych podczas uruchamiania w procesie 64-bitowym. Mogą być one używane w scenariuszach międzyoperacyjnych, bibliotekach niskiego poziomu i optymalizacji wydajności w scenariuszach, w których matematyczne liczby całkowite są szeroko używane.
Typy liczb całkowitych o rozmiarze natywnym są reprezentowane wewnętrznie jako typy System.IntPtr platformy .NET i System.UIntPtr. Typy nint i nuint to aliasy dla typów bazowych.
Wartość domyślna każdego typu całkowitego to zero, 0.
Każdy z typów całkowitych ma właściwości MinValue i MaxValue, które zapewniają minimalną i maksymalną wartość tego typu. Te właściwości są stałymi w czasie kompilacji, z wyjątkiem przypadków typów o rozmiarze natywnym (nint i nuint). Właściwości MinValue i MaxValue są obliczane w czasie wykonywania dla typów o rozmiarze natywnym. Rozmiary tych typów zależą od ustawień procesu.
Użyj struktury System.Numerics.BigInteger, aby reprezentować całkowitą liczbę ze znakiem bez górnego ani dolnego ograniczenia.
Literały liczb całkowitych
Literały liczb całkowitych mogą być
- dziesiętne: bez żadnego prefiksu
-
szesnastkowy: z prefiksem
0xlub0X -
binary: z prefiksem
0blub0B
Poniższy kod przedstawia przykład każdego z nich:
var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;
W poprzednim przykładzie pokazano również użycie _ jako separatora cyfr . Separatora cyfr można używać ze wszystkimi rodzajami literałów liczbowych.
Sufiks określa typ literału liczby całkowitej w następujący sposób:
Jeśli literał nie ma sufiksu, jego typ jest pierwszym z następujących typów, w których można przedstawić jego wartość:
int, ,uintlong,ulong.Uwaga / Notatka
Literały są interpretowane jako liczby dodatnie. Na przykład literał
0xFF_FF_FF_FFreprezentuje liczbę4294967295typuuint, choć ma taką samą reprezentację bitów jak liczba-1typuint. Jeśli potrzebujesz wartości określonego typu, przekształć wartość bezpośrednią na ten typ.uncheckedUżyj operatora , jeśli wartość literału nie może być reprezentowana w typie docelowym. Na przykładunchecked((int)0xFF_FF_FF_FF)tworzy wartość-1.Jeśli literał zawiera
Usufiks lubu, jego typ jest pierwszym z następujących typów, w których można przedstawić jego wartość:uint,ulong.Jeśli literał zawiera
Lsufiks lubl, jego typ jest pierwszym z następujących typów, w których można przedstawić jego wartość:long,ulong.Uwaga / Notatka
Możesz użyć małej litery
ljako sufiksu. Jednak generuje ostrzeżenie kompilatora,lponieważ literalmoże być mylona z cyfrą1. Użyj funkcjiLw celu zachowania przejrzystości.Jeśli literał zawiera jeden z sufiksów
UL, ,lULUUlulLuuLlujest to .ulong
Jeśli wartość, jaką reprezentuje literał liczby całkowitej, przekracza UInt64.MaxValue, wystąpi błąd kompilatora CS1021.
Jeśli określony typ literału liczby całkowitej jest int i wartość reprezentowana przez literał mieści się w zakresie typu docelowego, wartość może zostać niejawnie przekonwertowana na sbyte, , uintbyteushortulongshort, nintlub :nuint
byte a = 17;
byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
Jak pokazano w poprzednim przykładzie, jeśli wartość literału nie mieści się w zakresie typu docelowego, występuje błąd kompilatora CS0031 .
Można również użyć rzutowania, aby przekonwertować wartość reprezentowaną przez literał liczby całkowitej na inny typ niż typ określony dla literału.
var signedByte = (sbyte)42;
var longVariable = (long)42;
Konwersje
Można przekonwertować dowolny typ liczbowy całkowity na dowolny inny typ liczbowy całkowity. Jeśli typ docelowy może przechowywać wszystkie wartości typu źródłowego, konwersja jest niejawna. W przeciwnym razie należy użyć wyrażenia rzutowania do przeprowadzenia jawnej konwersji. Aby uzyskać więcej informacji, zobacz wbudowane konwersje liczbowe.
Liczby całkowite o rozmiarze natywnym
Typy liczb całkowitych o rozmiarze natywnym mają specjalne zachowanie, ponieważ magazyn pasuje do naturalnego rozmiaru całkowitego na maszynie docelowej.
Aby uzyskać rozmiar liczby całkowitej o rozmiarze natywnym w czasie wykonywania, możesz użyć polecenia
sizeof(). Jednak kod musi zostać skompilowany w niebezpiecznym kontekście. Przykład: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 = 4Możesz również uzyskać równoważną wartość ze statycznych IntPtr.Size i UIntPtr.Size właściwości.
pl-PL: Aby uzyskać minimalne i maksymalne wartości liczb całkowitych o rozmiarze natywnym w czasie wykonywania, użyj właściwości statycznych
MinValueiMaxValuez słowami kluczowyminintinuint, jak w poniższym przykładzie: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 = 4294967295Chociaż pełny zakres
nintinuintmoże być większy, stałe czasu kompilacji są ograniczone do zakresu 32-bitowego:- Dla
nintelementu : Int32.MinValue do Int32.MaxValue. - Dla
nuintelementu : UInt32.MinValue do UInt32.MaxValue.
- Dla
Kompilator udostępnia niejawne i jawne konwersje na inne typy liczbowe. Aby uzyskać więcej informacji, zobacz wbudowane konwersje liczbowe.
Nie istnieje bezpośrednia składnia dla literałów liczb całkowitych o rozmiarze natywnym. Nie ma sufiksu wskazującego, że literał jest liczbą całkowitą o wielkości natywnej, na przykład
Lwskazującą wartośćlong. Zamiast tego można użyć niejawnych lub jawnych rzutów innych wartości całkowitych. Przykład:nint a = 42 nint a = (nint)42;
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz następujące sekcje specyfikacji języka C#:
- typy całkowite
- Literały liczb całkowitych
- Typy całkowite o rozmiarze natywnym
-
Numeryczne
IntPtriUIntPtr
Zobacz także
- typy wartości
- typy zmiennoprzecinkowe
- Standardowe formaty ciągów liczbowych
- liczbowe na platformie .NET