Целочисленные (Integers)

Знаковые и без знаковые целочисленные переменные поддерживаются полностью. В данном документе термин целочисленное (integer) подразумевает оба варианта, знаковый и без знаковый. Без знаковые целочисленные имеют точность ровно 32 бита. Знаковые целочисленные используют 32 бита, включая знаковый бит, в видео поразрядного дополнения (дополнительного кода). Операции сложения, вычитания и сдвига приводащие к выходу за границы, не вызовут исключений и не приведут к заполнению, предпочтительным вариантом будет «свернуть» до младших 32 бит. Операции деления и умножения при выходе за границы не вызывают исключений но приводят к неопределенному значению.

Целочисленные объявляются, и опционально инициализируются целочисленными выражениями, как в следующем примере:

int i, j = 42; // целочисленное значение по умолчанию имеет тип int
uint k = 3u; // “u” — uint

Тип целочисленной константы может быть выражен в десятичном (decimal), восьмеричном (octal) или шестнадцатеричном (hexadecimal) формате, как показано далее:

целочисленная-константа:
десятичная-константа целочисленный-суффиксопционально
восьмеричная-константа целочисленный-суффиксопционально
шестнадцатеричная-константа целочисленный-суффиксопционально

целочисленный-суффикс: один из
u U

десятичная-константа:
ненулевая-цифра
десятично-константная цифра

восьмеричная-константа:
0
восьмерично-константная восьмеричная-цифра

шестнадцатеричная-константа:
0x шестнадцатеричная-цифра
0X шестнадцатеричная-цифра
шестнадцатерично-константная шестнадцатеричная-цифра

цифра:
0
ненулевая-цифра

ненулевая-цифра: одна из
1 2 3 4 5 6 7 8 9

восьмеричная-цифра: одна из
0 1 2 3 4 5 6 7

шестнадцатеричная-цифра: одна из
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F

(*Примечание. В тексте немного не четко указано, потому приведу пример: 123 — десятичное (не ноль в начале), 0123 — восьмеричное (ноль в начале), 0x123- шестнадцатеричное (0x в начале))

Между числами не допускаются пробелы, в том числе после первого 0 или 0x/0X, или перед суффиксом u или U. При обработке символов максимальный знак, соответствующий указанному выше, будет распознан до того, как будет запущен следующий знак. Суффикс u или U обозначают, что тип uint, в противном случае будет int. Стоящий в начале унарный знак минуса (-) интерпретируется как арифметическое унарное отрицание, а не как часть константы. Следовательно сами переменные всегда имеют неотрицательный синтаксис, хотя и могут привести к отрицательному значению.

Ошибки времени компиляции в случаях, когда структура бит не может поместиться в 32 бита. Структура бит всегда используется без изменений. Таким образом битовая переменная, чья структура бит содержит знаковый бит, создает отрицательное значение. Например:

int a = 0xffffffff; // 32 bits, получает значение -1

int b = 0xffffffffU; // ERROR:нельзя конвертировать uint в int

uint c = 0xffffffff; // 32 bits, c получает значение 0xFFFFFFFF

uint d = 0xffffffffU; // 32 bits, d получает значение 0xFFFFFFFF

int e = -1; // значение “1”, затем выполняется отрицание,

                  // в результате 32-bit знаковое

                  // присваивается структура бит 0xFFFFFFFF,

                  //что дает e значение -1.

uint f = -1u; // значение “1u”, затем выполняется отрицание,

                      // в результате 32-bit без знаковое

                      // присваивается структура бит 0xFFFFFFFF is assigned

                      //что дает f значение 0xFFFFFFFF.

int g = 3000000000; // десятеричное знаковое принимает 32 bits,

                                            // устанавливается знаковый бит, g принимает -1294967296

int h = 0xA0000000; // все хорошо, 32-bit знаковое шестнадцатеричное

int i = 5000000000; // ERROR: нужно более чем 32 bits

int j = 0xFFFFFFFFF; // ERROR: нужно более чем 32 bits

int k = 0x80000000; // k получает -2147483648 == 0x80000000

int l = 2147483648; // l получает -2147483648 (устанавливается знаковый бит)

.

Несмотря на все эти примеры инициализации переменных, значения (литералы) распространяются и указывают значения и типы независимо от контекста.

Main Admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *