Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
12
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

4.1.5Целые типы

В C# поддерживается девять целых типов: sbyte, byte, short, ushort, int, uint, long, ulong и char. Целые типы имеют следующие размеры и диапазоны значений:

  • Тип sbyte представляет 8-разрядные целые числа со знаком в диапазоне от –128 до 127.

  • Тип byte представляет 8-разрядные целые числа без знака в диапазоне от 0 до 255.

  • Тип short представляет 16-разрядные целые числа со знаком в диапазоне от –32768 до 32767.

  • Тип ushort представляет 16-разрядные целые числа без знака в диапазоне от 0 до 65535.

  • Тип int представляет 32-разрядные целые числа со знаком в диапазоне от –2147483648 до 2147483647.

  • Тип uint представляет 32-разрядные целые числа без знака в диапазоне от 0 до 4294967295.

  • Тип long представляет 64-разрядные целые числа со знаком в диапазоне от –9223372036854775808 до 9223372036854775807.

  • Тип ulong представляет 64-разрядные целые числа без знака в диапазоне от 0 до 18446744073709551615.

  • Тип char представляет 16-разрядные целые числа без знака в диапазоне от 0 до 65535. Набор возможных значений для типа char соответствует набору символов Юникода. Несмотря на то, что представления типов char и ushort совпадают, наборы допустимых операций для каждого типа различаются.

Унарные и бинарные операторы целого типа всегда работают с точностью, соответствующей 32- или 64-разрядным числам со знаком или без знака:

  • Для унарных операторов «+» и «~» операнд преобразуется к типу T, где T — первый тип из набора int, uint, long и ulong, с помощью которого могут быть полностью представлены все возможные значения операнда. Операция выполняется с использованием точности, соответствующей типу T. Результат операции имеет тип T.

  • Для унарного оператора «–» операнд преобразуется к типу T, где T — первый тип из набора int и long, с помощью которого могут быть полностью представлены все возможные значения операнда. Операция выполняется с использованием точности, соответствующей типу T. Результат операции имеет тип T. Не допускается применение унарного оператора «–» к операндам типа ulong.

  • Для бинарных операторов +, –, *, /, %, &, ^, |, ==, !=, >, <, >= и <= операнды преобразуются к типу T, где T — первый тип из набора int, uint, long и ulong, с помощью которого могут быть полностью представлены все возможные значения обоих операндов. Операция выполняется с использованием точности, соответствующей типу T. Результат операции имеет тип T (или bool для операторов отношения). Для бинарных операторов не допускается использование двух переменных различных типов (например long и ulong).

  • Для бинарных операторов << и >> левый операнд преобразуется к типу T, где T — первый тип из набора int, uint, long и ulong, с помощью которого могут быть полностью представлены все возможные значения операнда. Операция выполняется с использованием точности, соответствующей типу T. Результат операции имеет тип T.

Тип char классифицируется как целый тип, однако имеет два отличия от других целых типов:

  • Не поддерживается неявное преобразование из других типов к типу char. В частности, несмотря на то, что диапазоны значений для типов sbyte, byte и ushort могут быть полностью представлены с помощью типа char, неявное преобразование из типов sbyte, byte и ushort к типу char не существует.

  • Константы типа char должны записываться в виде символьных или целочисленных_литералов в сочетании с приведением к типу char. Например, записи (char)10 и '\x000A' аналогичны.

Для управления проверкой переполнения при выполнении целочисленных арифметических операций и преобразований используются операторы checked и unchecked (§7.6.12). В контексте checked при переполнении возникает ошибка времени компиляции или порождается исключение System.OverflowException. В контексте unchecked переполнение игнорируется, а все старшие биты, не соответствующие размеру конечного типа, удаляются.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]