Uinteger — тип данныхuinteger data type
Содержание:
- Явные реализации интерфейса
- Арифметика
- Число с плавающей запятой
- Моя критика
- Переменные в C++
- Символьные типы данных
- Другие решения
- Символьный тип
- См. такжеSee also
- Класс Boolean
- Промежуточные вычисления с ограниченными целыми числами
- Целочисленный тип данных integer
- ДиапазонRange
- Целочисленные литералыInteger literals
Явные реализации интерфейса
Сравнивает этот экземпляр с заданным объектом и возвращает значение, указывающее, как соотносятся значения этих объектов.Compares this instance to a specified object and returns an indication of their relative values. |
|
Возвращает TypeCode для типа значения Int32.Returns the TypeCode for value type Int32. |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Это преобразование не поддерживается.This conversion is not supported. При попытке использовать этот метод выбрасывается исключение InvalidCastException.Attempting to use this method throws an InvalidCastException. |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
|
Описание этого члена см. в разделе .For a description of this member, see . |
Арифметика
Продвижение/преобразование
- Унарный арифметический оператор применяется только к одному операнду. Примеры: , .
- Бинарный оператор применяется к двум операндам. Примеры: , , . .
- Если операнд имеет тип , или (как , так и ), тогда он продвигается до (), если может содержать все значения исходного типа. В противном случае он продвигается до . Процесс продвижения происходит без потерь. Примеры:
- В реализации присутствуют 16-битный и 24-битный . Если переменные и имеют тип , то операция продвигает оба операнда до .
- В реализации присутствуют 32-битный и 32-битный . Если переменные и имеют тип , то операция продвигает оба операнда до .
- В случае двоичных операторов оба операнда перед арифметической операцией неявно преобразуются в одинаковый общий тип. Ранги преобразования возрастают в следующем порядке: , , . Рангом общего типа считается старший ранг среди типов двух операндов. Если оба операнда являются , то их общий тип будет иметь ту же характеристику. Если же операнд с беззнаковым типом имеет старший или равный ранг по отношению ко второму операнду, то их общий тип будет беззнаковым. В случае, когда тип операнда со знаком может представлять все значения другого типа операнда, общий тип будет иметь знак. В противном случае общий тип получается беззнаковым. Примеры:
- ;
- ;
- ;
- если является 32-битным, а long 64-битным: ;
- если и оба являются 32-битными: .
Неопределенное поведение
Знаковое переполнение:
- При выполнении арифметических операций над целочисленным типом переполнение считается неопределенным поведением (UB). Такое поведение может вызывать верные, несогласованные и/или неверные действия как сразу, так и в дальнейшем.
- При выполнении арифметики над беззнаковым целым (после продвижений и преобразований) любое переполнение гарантированно вызовет оборот значения. Например, .
- Выполнение арифметики над беззнаковыми целыми фиксированного размера может привести к едва уловимым ошибкам. Например:
- Пусть , и равен 32-битам. Тогда , ,; и будут продвинуты до , и приведет к переполнению , вызвав неопределенное поведение.
- Пусть , и равен 33-битам. Тогда , , ; и будут продвинуты до , и приведет к переполнению , то есть неопределенному поведению.
- Чтобы обеспечить безопасную арифметику с беззнаковыми целыми, нужно либо прибавить , либо умножить на в качестве пустой операции. Например: или . Это гарантирует, что операнды будут продвинуты как минимум до ранга и при этом останутся без знаков.
Деление/остаток:
- Деление на нуль и остаток с делителем нуля также относятся к неопределенному поведению.
- Беззнаковое деление/остаток не имеют других особых случаев.
- Деление со знаком может вызывать переполнение, например .
- Остаток со знаком при отрицательных операндах может вызывать сложности, так как некоторые части являются однообразными, в то время как другие определяются реализацией.
Битовые сдвиги:
- Неопределенным поведением считается битовый сдвиг (< < и >>) на размер, который либо отрицателен, либо равен или больше битовой ширины.
- Левый сдвиг беззнакового операнда (после продвижения/преобразования) считается определенным правильно и отклонений в поведении не вызывает.
- Левый сдвиг операнда со знаком, содержащего неотрицательное значение, вследствие которого 1 бит переходит в знаковый бит, является неопределенным поведением.
- Левый сдвиг отрицательного значения относится к неопределенному поведению.
- Правый сдвиг неотрицательного значения (в типе операнда без знака или со знаком) считается определенным правильно и отклонений в поведении не вызывает.
- Правый сдвиг отрицательного значения определяется реализацией.
Число с плавающей запятой
Число с плавающей запятой содержит десятичные точки. Он может быть положительным или отрицательным.
Мы можем использовать функцию float(), чтобы получить представление объекта с плавающей запятой. В объекте должен быть реализован метод __float __(), который возвращает число с плавающей запятой.
x = 10.50 print(x) print(type(x)) x = float("10.50") print(x) print(type(x)) class Data: id = 0.0 def __init__(self, i): self.id = i def __float__(self): return float(self.id) d = Data(10.50) x = float(d) print(x) print(type(x)) d = Data(10) x = float(d) print(x) print(type(x))
Вывод:
10.5 <class 'float'> 10.5 <class 'float'> 10.5 <class 'float'> 10.0 <class 'float'>
String обеспечивает реализацию метода __float __(). Вот почему мы можем легко преобразовать строку в float.
Если объект не реализует метод __float __(), мы получаем сообщение об ошибке как:
TypeError: float() argument must be a string or a number, not 'Data'
Если метод объекта __float __() не возвращает число с плавающей запятой, мы получаем сообщение об ошибке как:
TypeError: Data.__float__ returned non-float (type int)
Мы также можем определить число с плавающей запятой в экспоненциальной нотации, используя «e» или «E». Здесь число после «E» обозначает степень до 10.
x = 10.5e2 print(x) x = 10.5E2 print(x)
Выход:
1050.0 1050.0
Пояснение: 10,5E2 = 10,5 * pow (10, 2) = 10,5 * 100 = 1050,0
Моя критика
Если вкратце, то знание и постоянное использование всех этих правил сильно нагружает мышление. Допущение же ошибки в их применении приводит к риску написания неверного или непортируемого кода. При этом такие ошибки могут как всплыть сразу, так и таиться в течение дней или даже долгих лет.
Сложности начинаются с битовой ширины базовых целочисленных типов, которая зависит от реализации. Например, может иметь 16, 32, 64 бита или другое их количество. Всегда нужно выбирать тип с достаточным диапазоном. Но иногда использование слишком обширного типа (например, необычного 128-битного ) может вызвать сложности или даже внести уязвимости. Усугубляется это тем, что такие типы из стандартных библиотек, как , не имеют связи с другими типами вроде беззнакового или ; стандарт позволяет им быть шире или уже.
Правила преобразования совершенно безумны. Что еще хуже, практически везде допускаются неявные преобразования, существенно затрудняющие аудит человеком. Беззнаковые типы достаточно просты, но знаковые имеют очень много допустимых реализаций (например, обратный код, создание исключений). Типы с меньшим рангом, чем , продвигаются автоматически, вызывая труднопонимаемое поведение с диапазонами и переполнение. Когда операнды отличаются знаковостью и рангами, они преобразуются в общий тип способом, который зависит от определяемой реализацией битовой ширины. Например, выполнение арифметики над двумя операндами, как минимум один из которых имеет беззнаковый тип, приведет к преобразованию их обоих либо в знаковый, либо в беззнаковый тип в зависимости от реализации.
Арифметические операции изобилуют неопределенным поведением: знаковое переполнение в , деление на нуль, битовые сдвиги. Несложно создать такие условия неопределенного поведения по случайности, но сложно вызвать их намеренно или обнаружить при выполнении, равно как выявить их причины. Необходима повышенная внимательность и усилия для проектирования и реализации арифметического кода, исключающего переполнение/UB. Стоит учитывать, что впоследствии становится сложно отследить и исправить код, при написании которого не соблюдались принципы защиты от переполнения/UB.
Присутствие и версии каждого целочисленного типа удваивает количество доступных вариантов. Это создает дополнительную умственную нагрузку, которая не особо оправдывается, так как типы со знаком способны выполнять практически все те же функции, что и беззнаковые.
Ни в одном другом передовом языке программирования нет такого числа правил и подводных камней касательно целочисленных типов, как в С и C++. Например:В Java целые числа ведут себя одинаково в любой среде. В этом языке определено конкретно 5 целочисленных типов (в отличие от C/C++, где их не менее 10). Они имеют фиксированную битовую ширину, практически все из них имеют знаки (кроме ), числа со знаком должны находиться в дополнительном коде, неявные преобразования допускают только их варианты без потерь, а вся арифметика и преобразования определяются точно и не вызывают неоднозначного поведения. Целочисленные типы в Java поддерживают быстрое вычисление и эффективное упаковывание массивов в сравнении с языками вроде Python, где есть только переменного размера.
Java в значительной степени опирается на 32-битный тип , особенно для перебора массивов. Это означает, что этот язык не может эффективно работать на малопроизводительных 16-битных ЦПУ (часто используемых во встраиваемых микроконтроллерах), а также не может непосредственно работать с большими массивами в 64-битных системах
К сравнению, C/C++ позволяет писать код, эффективно работающий на 16, 32 и/или 64-битных ЦПУ, но при этом требует от программиста особой осторожности.
В Python есть всего один целочисленный тип, а именно. В сравнении с C/C++ это сводит на нет все рассуждения на тему битовой ширины, знаковости и преобразований, так как во всем коде правит один тип
Тем не менее за это приходится платить низкой скоростью выполнения и несогласованным потреблением памяти.
В JavaScript вообще нет целочисленного типа. Вместо этого в нем все выражается через математику (в C/C++). Из-за этого битовая ширина и числовой диапазон оказываются фиксированными, числа всегда имеют знаки, преобразования отсутствуют, а переполнение считается нормальным.
Язык ассемблера для любой конкретной машинной архитектуры (x86, MIPS и т.д.) определяет набор целочисленных типов фиксированной ширины, арифметические операции и преобразования – с редкими случаями неопределенного поведения или вообще без них.
Переменные в C++
Теперь попробуем создать свои переменные.
Для начала объявим переменную, то есть скажем компьютеру, что нам нужно занять место в памяти. Для этого укажем тип данных, а потом название переменной.
Код | Как читается |
---|---|
int x; | Объявить целочисленную переменную x без значения. |
Так создаётся переменная без значения. Если вы хотите, чтобы в ней сразу было какое-то число, то нужно использовать знак присваивания (=):
Код | Как читается |
---|---|
int y = 5; | Объявить целочисленную переменную y со значением 5. |
Теперь в любое время можно менять значения переменных:
Код | Как читается |
---|---|
x = 6; | Присвоить переменной x значение 6. |
Математический знак равенства (=) в программировании называется знаком присваивания.
Важно! Указывать тип данных нужно только при объявлении переменной. Давайте попробуем вывести значение какой-нибудь переменной на экран
Для этого напишем следующий код:
Давайте попробуем вывести значение какой-нибудь переменной на экран. Для этого напишем следующий код:
Внимательно прочтите этот код, а потом скомпилируйте и запустите программу:
Символьные типы данных
Ниже перечислены символьные типы данных в Oracle/PLSQL:
Типы данных | Размер | Описание |
---|---|---|
char(размер) | Максимальный размер 2000 байт. | Где размер — количество символов фиксированной длины. Если сохраняемое значение короче, то дополняется пробелами; если длиннее, то выдается ошибка. |
nchar(размер) | Максимальный размер 2000 байт. | Где размер — количество символов фиксированной длины в кодировке Unicode. Если сохраняемое значение короче, то дополняется пробелами; если длиннее, то выдается ошибка. |
nvarchar2(размер) | Максимальный размер 4000 байт. | Где размер – количество сохраняемых символов в кодировке Unicode переменной длины. |
varchar2(размер) | Максимальный размер 4000 байт. Максимальный размер в PLSQL 32KB. | Где размер – количество сохраняемых символов переменной длины. |
long | Максимальный размер 2GB. | Символьные данные переменной длины. |
raw | Максимальный размер 2000 байт. | Содержит двоичные данные переменной длины |
long raw | Максимальный размер 2GB. | Содержит двоичные данные переменной длины |
Применение: Oracle 9i, Oracle 10g, Oracle 11g, Oracle 12c
Другие решения
выражение оценивает указатель некоторого типа, указывая на память, которая была выделена в свободном хранилище (по сути, куча), но не обязательно в бесплатный магазин. (Он все еще может находиться в бесплатном хранилище в зависимости от контекста; например, рассмотрим список инициализации в конструкторе для объекта, размещаемого в бесплатном хранилище.)
Объект (ы), инициализированный Есть / конечно в бесплатном магазине.
В показанных вами операторах присваивания вы можете увидеть тип указателя, возвращаемого в левой части знака равенства, а также тип объекта (-ов) бесплатного магазина справа от , Таким образом, единственный объект, который оценивается локально (т. Е. Может находиться в стеке), — это, в первом случае, указатель на указатель на int, а во втором случае — указатель на int. Объекты в свободном пространстве — это массив указателей на целые в первом случае и простой массив целых во втором.
Обратите внимание, что только потому, что массив в первом присваивании состоит из указатели не означает, что сами указатели на самом деле указать на что-нибудь еще; магически рекурсивно не выделяет свободное пространство для объектов, на которые нацелены любые указатели в массиве, который он создает. (В любом случае это не имеет особого смысла.). означает, что у вас есть указатель на указатели
В более практическом смысле это означает, что у вас есть двумерный массив
означает, что у вас есть указатель на указатели. В более практическом смысле это означает, что у вас есть двумерный массив.
Поскольку каждый элемент массива также является указателем, вам необходимо также инициализировать эти указатели:
Это инициализирует массив 100×200. Вы можете получить доступ к правому нижнему углу с ,
Когда пришло время удалить указатель, вы должны полностью изменить процесс:
Символьный тип
Значениями символьного типа являются символы, которые можно набрать на клавиатуре компьютера. Это позволяет представить в программе текст и производить над ним различные операции: вставлять, удалять отдельные буквы и слова, форматировать и т.д.
Символьный тип обозначается зарезервированным словом Char и предназначен для хранения одного символа. Данные символьного типа в памяти занимают один байт.
Формат объявления символьной переменной:
<имя переменной>: Char;
При определении значения символьной переменной символ записывается в апострофах. Кроме того, задать требуемый символ можно указанием непосредственно его числового значения ASCII-кода. В этом случае необходимо перед числом, обозначающим код ASCII необходимого символа, поставить знак #.
Пример использования переменных символьного типа:
Var c:char; {c – переменная символьного типа} Begin c:=’A’; {переменной c присваивается символ ’A’} c:=#65; {переменной c также присваивается символ A. Его ASCII код равен 65} c:=’5’; {переменной c присваивается символ 5, End. здесь 5 это уже не число}
См. такжеSee also
- Сводка типов данныхData types summary
- Глоссарий редактора Visual Basic (VBE)Visual Basic Editor (VBE) Glossary
- Темы по основам Visual BasicVisual Basic conceptual topics
Поддержка и обратная связьSupport and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Класс Boolean
Тип практически такой же, как тип . Отличия минимальны.
Ниже мы покажем упрощенный вариант класса :
Код | Описание |
---|---|
Константы: и Переменная-значение Конструктор класса Метод возвращает значение внутренней переменной-значения Этот статический метод умеет преобразовывать в и в . |
В типе есть две константы (два поля):
Константы класса | Аналог типа boolean | Описание |
---|---|---|
истина | ||
ложь |
Работать с ними можно так же, как и с типом :
Код | Примечание |
---|---|
— единственный класс, который можно писать внутри условия | |
Все три переменные равны / | |
Константы можно сравнивать и через и через Так тоже будет работать. |
Autoboxing тут работает отлично, поэтому можете пользоваться этим типом так же, как типом : никаких подводных камней тут нет.
Как записано | Как это работает |
---|---|
А вот как происходят сравнения между типами и :
Если очень нужно создать независимый объект , то надо создать его явно:
И еще один пример: использование внутри :
Код | Примечание |
---|---|
Скомпилируется и будет работать |
Скомпилируется, но работать не будет:
Код | Примечание |
---|---|
Ошибка. В этой строке кинется исключение |
Промежуточные вычисления с ограниченными целыми числами
Важно отметить, что хотя симулятор будет проверять диапазон значений, назначенных целому числу , эта проверка происходит только при фактическом присваивании значения, а не во время промежуточных вычислений. Чтобы прояснить это, рассмотрим следующий код:. Предположим, что и равны 45
В строке 9 первым будет определено. Таким образом, выражение внутри круглых скобок равно 90, что будет выходить за пределы диапазона, который может принимать. Тем не менее, это промежуточное вычисление, и поскольку присваивание пока не задействовано, симулятор не будет проверять диапазон результата. Затем выполняется вычитание, т.е. 90-1=89. Наконец, значение 89, которое находится теперь внутри заданного диапазона, будет присвоено. Ниже показана ISE симуляция для приведенного выше кода
Предположим, что и равны 45. В строке 9 первым будет определено . Таким образом, выражение внутри круглых скобок равно 90, что будет выходить за пределы диапазона, который может принимать . Тем не менее, это промежуточное вычисление, и поскольку присваивание пока не задействовано, симулятор не будет проверять диапазон результата. Затем выполняется вычитание, т.е. 90-1=89. Наконец, значение 89, которое находится теперь внутри заданного диапазона, будет присвоено . Ниже показана ISE симуляция для приведенного выше кода.
Рисунок 4 – Результаты симуляции
В принципе, промежуточные вычисления выполняются с использованием стандартного диапазона типа , т.е. 32 бита. Однако, поскольку это не будет оптимальной реализацией, программное обеспечение для синтеза будет выполнять некоторые оптимизации в зависимости от характера используемых операторов. Например, если промежуточная операция состоит в том, чтобы сложить два целых числа с диапазоном от 0 до 15, результат этого промежуточного вычисления будет иметь достаточное количество бит для представления наибольшего возможного значения, которое равно 30.
Целочисленный тип данных integer
Мы можем использовать тип данных для определения объектов, значение которых может быть целым числом. Например, следующие строки определяют сигнал типа и присваивают ему целое число 4.
Как показано на рисунке 2, тип данных относится к категории «стандартных типов», которая определена в пакете “” из библиотеки “”. Как обсуждалось в предыдущей статье, нам не нужно явно делать пакет “” и библиотеку “” видимыми для проекта.
Следующий код показывает простой пример, когда два входа типа , и , складываются вместе, и результат присваивается .
На рисунке 3 показан результат ISE симуляции приведенного выше кода. На этом рисунке показан десятичный эквивалент значений ввода/вывода. Например, от 200 нс до 300 нс, входы и равны 3 и -1 соответственно. Таким образом, выход, , равен 3 + (-1) = 2.
Рисунок 3 – Результаты симуляции
При использовании целочисленного типа данных мы не принимаем непосредственного участия в определениях на уровне битов, однако ясно, что реализация для представления определенных сигналов будет использовать несколько бит. Сколько бит будет использоваться для представления целочисленных сигналов в приведенном выше коде? VHDL не указывает точное количество бит, но любая реализация VHDL должна поддерживать как минимум 32-разрядрую реализацию типа . Согласно стандарту, эта 32-разрядная реализация позволяет присваивать объекту типа целое число в диапазоне от -(231-1) до +(231-1).
Иногда мы имеем дело с ограниченными значениями, и для представления небольшого значения неэффективно использовать 32-разрядный сигнал. Например, предположим, что вход принимает значение от до 45. Таким образом, мы можем использовать 6-разрядный сигнал вместо 32-разрядного представления, потому что 4510=1011012. Более того, предположим, что другой вход, , имеет значение в диапазоне от -45 до 45, поэтому должно использоваться знаковое () представление. Учитывая бит знака, нам нужно всего семь битов вместо 32 битов по умолчанию, потому что представление двух -45 равно 1010011. Чтобы добиться значительного сокращения использования ресурсов FPGA, мы можем просто указать диапазон значений сигналов, как в следующем коде:
Данный код предполагает, что входы и находятся в диапазонах от 0 до 45 и от -45 до 45 соответственно. Поскольку равен , диапазон будет от -45 до 90. Ограничение диапазона целых чисел уменьшает объем ресурсов FPGA, необходимых для реализации проекта. Более того, это дает возможность проверить на ошибки на ранних этапах проектирования. Например, предположим, что представляет собой угол, и из системных спецификаций мы знаем, что значение этого угла ограничено диапазоном от -45 до 90.
Как указано в приведенном выше коде, мы можем применить этот диапазон к определению объекта . Теперь, если мы допустим ошибку, которая заставляет значение находиться за пределами указанного диапазона, программное обеспечение симулятора выдаст ошибку и идентифицирует строку кода, которая включает недопустимое присваивание. Например, если мы укажем диапазон как от -45 до 89, а затем присвоим значение 45 и , и , ISIim симулятор прекратит моделирование со следующей ошибкой (ISim – это название симулятора, который включен в программное обеспечение ISE):
(В моем коде моделирования строка 17 содержит присваивание .) Обратите внимание, что симулятор ISIM по умолчанию не отлавливает эти ошибки, связанные с диапазоном; вы должны включить опцию «value range check» (проверка диапазона значений). Если данная опция не включена, симуляция не остановится, и целому числу, объявленному с ограниченным диапазоном, сможет быть присвоено любое значение
Обратите внимание, что указание меньшего диапазона не всегда означает, что мы можем представить сигнал меньшим количеством бит. Например, рассмотрите следующие объявления:. Первые для объявления требуют трехразрядного представления, хотя второе объявление имеет меньший диапазон
Аналогичным образом, третье и четвертое объявления должны иметь четыре бита
Первые для объявления требуют трехразрядного представления, хотя второе объявление имеет меньший диапазон. Аналогичным образом, третье и четвертое объявления должны иметь четыре бита.
ДиапазонRange
При попытке присвоить целочисленной переменной значение, лежащее за пределами диапазона данного типа, возникает ошибка.If you try to set a variable of an integral type to a number outside the range for that type, an error occurs. При попытке задать дробное значение оно округляется вверх или вниз до ближайшего целого значения.If you try to set it to a fraction, the number is rounded up or down to the nearest integer value. Если число находится точно посередине между двумя целыми числами, значение округляется до ближайшего четного целого.If the number is equally close to two integer values, the value is rounded to the nearest even integer. Такое поведение минимизирует ошибки округления, происходящие от постоянного округления среднего значения в одном направлении.This behavior minimizes rounding errors that result from consistently rounding a midpoint value in a single direction. В следующем коде приведены примеры округления.The following code shows examples of rounding.
Целочисленные литералыInteger literals
Целочисленные литералы могут быть:Integer literals can be
- десятичным числом: без префикса;decimal: without any prefix
- шестнадцатеричным числом: с префиксом или ;hexadecimal: with the or prefix
- двоичными: с префиксом или (доступно в C# 7.0 и более поздних версиях).binary: with the or prefix (available in C# 7.0 and later)
В приведенном ниже коде показан пример каждого из них.The following code demonstrates an example of each:
В предыдущем примере также показано использование в качестве цифрового разделителя, который поддерживается, начиная с версии C# 7.0.The preceding example also shows the use of as a digit separator, which is supported starting with C# 7.0. Цифровой разделитель можно использовать со всеми видами числовых литералов.You can use the digit separator with all kinds of numeric literals.
Тип целочисленного литерала определяется его суффиксом следующим образом:The type of an integer literal is determined by its suffix as follows:
-
Если литерал не имеет суффикса, его типом будет первый из следующих типов, в котором может быть представлено его значение: , , , .If the literal has no suffix, its type is the first of the following types in which its value can be represented: , , , .
Примечание
Литералы интерпретируется как положительные значения.Literals are interpreted as positive values. Например, литерал представляет число типа , хотя он имеет то же битовое представление, что и число типа .For example, the literal represents the number of the type, though it has the same bit representation as the number of the type. Если вам требуется значение определенного типа, приведите литерал к этому типу.If you need a value of a certain type, cast a literal to that type. Используйте оператор , если представить значение литерала в целевом типе невозможно.Use the operator, if a literal value cannot be represented in the target type. Например, выдает .For example, produces .
-
Если у литерала есть суффикс или , его типом будет первый из следующих типов, в котором может быть представлено его значение: , .If the literal is suffixed by or , its type is the first of the following types in which its value can be represented: , .
-
Если у литерала есть суффикс или , его типом будет первый из следующих типов, в котором может быть представлено его значение: , .If the literal is suffixed by or , its type is the first of the following types in which its value can be represented: , .
Примечание
Строчную букву можно использовать в качестве суффикса.You can use the lowercase letter as a suffix. Однако при этом выдается предупреждение компилятора, так как букву можно перепутать с цифрой .However, this generates a compiler warning because the letter can be confused with the digit . Для ясности используйте .Use for clarity.
-
Если у литерала есть суффикс , , , , , , или , его тип — .If the literal is suffixed by , , , , , , , or , its type is .
Если значение, представленное целочисленным литералом, превышает UInt64.MaxValue, происходит ошибка компиляции CS1021.If the value represented by an integer literal exceeds UInt64.MaxValue, a compiler error CS1021 occurs.
Если определенный тип целочисленного литерала — , а значение, представленное литералом, находится в диапазоне целевого типа, значение можно неявно преобразовать в , , , , , , или :If the determined type of an integer literal is and the value represented by the literal is within the range of the destination type, the value can be implicitly converted to , , , , , , or :
Как показано в предыдущем примере, если значение литерала выходит за пределы диапазона целевого типа, возникает ошибка компилятора CS0031.As the preceding example shows, if the literal’s value is not within the range of the destination type, a compiler error CS0031 occurs.
Можно также использовать приведение для преобразования значения, представленного целочисленным литералом, в тип, отличный от определенного типа литерала:You can also use a cast to convert the value represented by an integer literal to the type other than the determined type of the literal: