18c0693f

Целочисленные типы


В обоих языках имеются следующие целочисленные типы:

В C# имеются беззнаковые аналоги всех перечисленных выше типов:

свой тип byte со значениями от 0 до (28–1 = 255).

ushort со значениями от 0 до (216–1) = 65535

uint со значениями от 0 до (232–1) = 4294967295

ulong со значениями от 0 до (264–1) = 18446744073709551615

Классы-обертки целочисленных типов называются так:

java.lang.Byte java.lang.Short java.lang.Integer java.lang.Long

Типы-обертки целочисленных типов называются так:

System.SByte System.Byte System.Int16 System.UInt16 System.Int32 System.UInt32 System.Int64 System.UInt64

Минимальные и максимальные значения примитивных типов можно найти в их типах-обертках в виде констант (static final полей) MIN_VALUE и MAX_VALUE.

Минимальные и максимальные значения примитивных типов можно найти в их типах-обертках в виде констант MinValue и MaxValue.

Над значениями целочисленных типов определены следующие операции:



В Java результаты арифметических действий вычисляются в зависимости от типа этих результатов, с отбрасыванием битов, "вылезающих" за размер типа.

Таким образом, эти операции реализуют арифметику по модулю 2n для n, подходящего для данного типа.

Арифметические операции над целыми числами приводят к созданию исключений только в трех случаях: при делении на 0 или вычислении остатка по модулю 0, при конвертации в примитивный тип ссылки на объект класса обертки, равной null, а также при исчерпании доступной Java-машине памяти, которое может случиться из-за применения операций -- и ++ с одновременным созданием объектов классов-оберток.


В C# результат арифметических действий над целочисленными данными, приводящих к переполнению, зависит от контекста, в котором эти действия производятся.

Если действие происходит в unchecked контексте (т.е. внутри блока или выражения, помеченных ключевым словом unchecked), то вычисления производятся в арифметике по подходящему модулю 2n.

Если же эти действия производятся в checked контексте (т.е. внутри блока или выражения, помеченных модификатором checked), то переполнение приводит к созданию исключения.

По умолчанию действия, производимые в ходе выполнения, происходят в unchecked контексте, а действия, которые выполняются над константами во время компиляции — в checked контексте. При этом создание исключения во время компиляции приводит к выдаче сообщения об ошибке.
Любые целочисленные типы можно явно приводить друг к другу, а неявные преобразования переводят из меньших типов в большие, если при этом нет перехода от типа со знаком к беззнаковому (обратный переход возможен).

В обоих языках целочисленным типом считается и тип char, чьими значениями являются 16-битные символы (от '\u0000' до '\uffff'). Для него определен тот же набор операций, но преобразования между ним и другими типами по умолчанию не производятся (явные преобразования возможны).