Целочисленные типы целых чисел (Справочник по C#)
Целочисленные типы представляют целые числа. Все целочисленные типы являются типами значений. Они также представляют собой простые типы и могут быть инициализированы литералами. Все целочисленные типы поддерживают арифметические операторы, побитовые логические операторы, операторы сравнения и равенства.
Характеристики целочисленных типов
C# поддерживает следующие предварительно определенные целочисленные типы:
Ключевое слово или тип C# Диапазон Размер Тип .NET sbyte От -128 до 127 8-разрядное целое число со знаком System.SByte byte От 0 до 255 8-разрядное целое число без знака System.Byte short От -32 768 до 32 767 16-разрядное целое число со знаком System.Int16 ushort От 0 до 65 535 16-разрядное целое число без знака System.UInt16 int От -2 147 483 648 до 2 147 483 647 32-разрядное целое число со знаком System.Int32 uint От 0 до 4 294 967 295 32-разрядное целое число без знака System.UInt32 long От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 64-разрядное целое число со знаком System.Int64 ulong От 0 до 18 446 744 073 709 551 615 64-разрядное целое число без знака System.UInt64 nint Зависит от платформы 32- или 64-разрядное целое число со знаком System.IntPtr nuint Зависит от платформы 32- или 64-разрядное целое число без знака System.UIntPtr
Во всех строках таблицы, кроме двух последних, каждое ключевое слово типа C# из крайнего левого столбца является псевдонимом для соответствующего типа .NET. Ключевое слово и имя типа .NET являются взаимозаменяемыми. Например, следующие объявления объявляют переменные одного типа:
Типы nint и nuint в последних двух строках таблицы являются целыми числами собственного размера. В коде такие числа представлены определенными типами .NET, но в каждом случае ключевое слово и тип .NET не взаимозаменяемы. Для nint и nuint компилятор предоставляет преобразования и операции, как для целочисленных типов. Они отличаются от преобразований и операций для типов указателей System.IntPtr и System.UIntPtr . Дополнительные сведения см. в статье о типах и nuint .
По умолчанию все целочисленные типы имеют значение 0 . Все целочисленные типы, кроме целых чисел собственного размера, имеют константы MinValue и MaxValue с минимальным и максимальным значением этого типа.
Используйте структуру System.Numerics.BigInteger, чтобы представить целое число со знаком без верхней и нижней границ.
Целочисленные литералы
Целочисленные литералы могут быть:
- десятичным числом: без префикса;
- шестнадцатеричное: с префиксом или 0X
- binary: с префиксом или 0B (доступен в C# 7,0 и более поздних версиях)
В приведенном ниже коде показан пример каждого из них.
В предыдущем примере также показано использование _ в качестве _ , который поддерживается, начиная с версии C# 7.0. Цифровой разделитель можно использовать со всеми видами числовых литералов.
Тип целочисленного литерала определяется его суффиксом следующим образом:
Если литерал не имеет суффикса, его типом будет первый из следующих типов, в котором может быть представлено его значение: int , uint , long , ulong .
Литералы интерпретируется как положительные значения. Например, литерал 0xFF_FF_FF_FF представляет число 4294967295 типа uint , хотя он имеет то же битовое представление, что и число -1 типа int . Если вам требуется значение определенного типа, приведите литерал к этому типу. Используйте оператор unchecked , если представить значение литерала в целевом типе невозможно. Например, unchecked((int)0xFF_FF_FF_FF) выдает -1 .
Если у литерала есть суффикс U или u , его типом будет первый из следующих типов, в котором может быть представлено его значение: uint , ulong .
Если у литерала есть суффикс L или l , его типом будет первый из следующих типов, в котором может быть представлено его значение: long , ulong .
Строчную букву l можно использовать в качестве суффикса. Однако при этом выдается предупреждение компилятора, так как букву l можно перепутать с цифрой 1 . Для ясности используйте L .
Если у литерала есть суффикс UL , Ul , uL , ul , LU , Lu , lU или lu , его тип — ulong .
Если значение, представленное целочисленным литералом, превышает UInt64.MaxValue , возникает ошибка компилятора UInt64.MaxValue .
Если определенный тип целочисленного литерала — int , а значение, представленное литералом, находится в диапазоне целевого типа, значение можно неявно преобразовать в sbyte , byte , short , ushort , uint , ulong , nint или nuint :
Как показано в предыдущем примере, если значение литерала выходит за пределы диапазона целевого типа, возникает ошибка компилятора CS0031.
Можно также использовать приведение для преобразования значения, представленного целочисленным литералом, в тип, отличный от определенного типа литерала:
Преобразования
Любой целочисленный тип можно преобразовать в любой другой целочисленный тип. Если целевой тип может хранить все значения исходного типа, преобразование является неявным. В противном случае необходимо использовать выражение приведения для выполнения явного преобразования. Для получения дополнительной информации см. статью Встроенные числовые преобразования.
Спецификация языка C#
Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#: