Całkowite typy liczbowe (C# odwołania)Integral numeric types (C# reference)

Całkowite typy liczbowe stanowią podzestaw typów prostych i mogą być zainicjowane z literały.The integral numeric types are a subset of the simple types and can be initialized with literals. Wszystkie typy zintegrowane są również typy wartości.All integral types are also value types. Całkowite typy liczbowe obsługuje arytmetyczne, bitowe logicznej, porównania i równości operatorów.All integral numeric types support arithmetic, bitwise logical, comparison, and equality operators.

Właściwości typów całkowitychCharacteristics of the integral types

C#obsługuje następujące wstępnie zdefiniowanych typów całkowitych:C# supports the following predefined integral types:

C#Wpisz/słowo kluczoweC# type/keyword ZakresRange RozmiarSize Typ architektury .NET.NET type
sbyte -128 do 127 znaków.-128 to 127 8-bitową liczbę całkowitą ze znakiemSigned 8-bit integer System.SByte
byte od 0 do 2550 to 255 Liczba całkowita bez znaku 8-bitowaUnsigned 8-bit integer System.Byte
short -32768 do 32767.-32,768 to 32,767 16-bitową liczbę całkowitą ze znakiemSigned 16-bit integer System.Int16
ushort 0 do 65 535.0 to 65,535 Liczba całkowita bez znaku 16-bitowychUnsigned 16-bit integer System.UInt16
int -2 147 483 2 147 483 648 do 647-2,147,483,648 to 2,147,483,647 32-bitowa liczba całkowita ze znakiemSigned 32-bit integer System.Int32
uint 4 294 967 0 Aby 2950 to 4,294,967,295 Liczba całkowita bez znaku 32-bitowyUnsigned 32-bit integer System.UInt32
long -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 64-bitowa liczba całkowita ze znakiemSigned 64-bit integer System.Int64
ulong 0 — 18,446,744,073,709,551,6150 to 18,446,744,073,709,551,615 Liczba całkowita bez znaku 64-bitowychUnsigned 64-bit integer System.UInt64

W powyższej tabeli każdego C# wpisz słowo kluczowe z lewej strony kolumny jest aliasem dla danego typu platformy .NET.In the preceding table, each C# type keyword from the leftmost column is an alias for the corresponding .NET type. Są one wymienne.They are interchangeable. Na przykład następujące deklaracje deklarowanie zmiennych tego samego typu:For example, the following declarations declare variables of the same type:

int a = 123;
System.Int32 b = 123;

Wartością domyślną każdego typu całkowitego wynosi zero, 0.The default value of each integral type is zero, 0. Każdy z typów całkowitych ma MinValue i MaxValue stałe, które zapewniają minimalną i maksymalną wartość tego typu.Each of the integral types has the MinValue and MaxValue constants that provide the minimum and maximum value of that type.

Użyj System.Numerics.BigInteger struktury do reprezentowania liczby całkowitej ze znakiem z nie górnego lub dolne granice.Use the System.Numerics.BigInteger structure to represent a signed integer with no upper or lower bounds.

Literały całkowiteIntegral literals

Literały całkowite może być określony jako dziesiętna literały, literały szesnastkowe, lub literały binarne.Integral literals can be specified as decimal literals, hexadecimal literals, or binary literals. Poniżej przedstawiono przykład każdego z nich:An example of each is shown below:

var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;

Literały dziesiętną nie wymagają dowolnego prefiksu.Decimal literals don't require any prefix. x Lub X oznacza prefiks szesnastkowy literał.The x or X prefix signifies a hexadecimal literal. b Lub B oznacza prefiks pliku binarnego literału.The b or B prefix signifies a binary literal. Deklaracja binaryLiteral demonstruje użycie _ jako separator cyfr.The declaration of binaryLiteral demonstrates the use of _ as a digit separator. Separator cyfr może służyć za pomocą wszystkich literałach numerycznych.The digit separator can be used with all numeric literals. Literały binarne oraz separator cyfr _ są obsługiwane, począwszy od C# 7.0.Binary literals and the digit separator _ are supported starting with C# 7.0.

Sufiksów literałówLiteral suffixes

l Lub L sufiks Określa, że powinien być typu całkowitego literał long typu.The l or L suffix specifies that the integral literal should be of the long type. ul Lub UL Określa sufiks ulong typu.The ul or UL suffix specifies the ulong type. Jeśli L sufiks jest używany na literał, która jest większa niż 9,223,372,036,854,775,807 (maksymalna wartość long), wartość jest konwertowana na ulong typu.If the L suffix is used on a literal that is greater than 9,223,372,036,854,775,807 (the maximum value of long), the value is converted to the ulong type. Jeśli wartości w postaci literału typu całkowitego przekracza UInt64.MaxValue, błąd kompilatora CS1021 występuje.If the value represented by an integral literal exceeds UInt64.MaxValue, a compiler error CS1021 occurs.

Uwaga

Mała litera "l" można użyć jako sufiks.You can use the lowercase letter "l" as a suffix. Jednakże spowoduje to wygenerowanie ostrzeżenia kompilatora ponieważ litera "l" można łatwo pomylić z cyfrą "1".However, this generates a compiler warning because the letter "l" is easily confused with the digit "1." Użyj "L" w celu uściślenia.Use "L" for clarity.

Typ literału typu całkowitegoType of an integral literal

Jeśli literał całkowity brak przyrostka, jego typ jest pierwszy następujące typy, w których jej wartość może być reprezentowana:If an integral literal has no suffix, its type is the first of the following types in which its value can be represented:

  1. int
  2. uint
  3. long
  4. ulong

Literał typu całkowitego można konwertować na typ o mniejszym zakresie niż domyślny, za pomocą przydziałów i rzutowania:You can convert an integral literal to a type with a smaller range than the default using either an assignment or a cast:

byte byteVariable = 42; // type is byte
var signedByte = (sbyte)42; // type is sbyte.

Literał typu całkowitego można konwertować na typ o większym zakresie niż domyślne przy użyciu przypisania, rzutowania lub sufiksu na literału:You can convert an integral literal to a type with a larger range than the default using either assignment, a cast, or a suffix on the literal:

var unsignedLong = 42UL;
var longVariable = 42L;
ulong anotherUnsignedLong = 42;
var anotherLong = (long)42;

KonwersjeConversions

Istnieje niejawna konwersja (o nazwie poszerzenie konwersji) między dwoma typami całkowitego gdzie docelowy typ można przechowywać wszystkie wartości typu źródłowego.There's an implicit conversion (called a widening conversion) between any two integral types where the destination type can store all values of the source type. Na przykład istnieje niejawna konwersja z int do long ponieważ zakres int wartości jest podzestawem odpowiednie long.For example, there's an implicit conversion from int to long because the range of int values is a proper subset of long. Ma niejawne konwersje z elementu mniejszy typ bez znaku typu całkowitego na większych typ całkowity ze znakiem.There are implicit conversions from a smaller unsigned integral type to a larger signed integral type. Istnieje również niejawna konwersja z dowolnego typu całkowitoliczbowego do dowolnego typu zmiennoprzecinkowego.There's also an implicit conversion from any integral type to any floating-point type. Istnieje niejawna konwersja z dowolnym typ całkowity ze znakiem do dowolnego typu całkowitoliczbowego bez znaku.There's no implicit conversion from any signed integral type to any unsigned integral type.

Aby przekonwertować co typ całkowity innego typu całkowitego, gdy niejawna konwersja nie jest zdefiniowany z typu źródłowego na typ docelowy należy użyć jawnego rzutowania.You must use an explicit cast to convert one integral type to another integral type when an implicit conversion is not defined from the source type to the destination type. Jest to nazywane konwersja zawężająca.This is called a narrowing conversion. Jawne przypadek jest wymagana, ponieważ konwersja może spowodować utratę danych.The explicit case is required because the conversion can result in data loss.

Zobacz takżeSee also