Для представления целых чисел в языке C++ существует несколько типов, например, short int (”короткое” целое), int (целое) и long int (“длинное” целое). Они отличаются друг от друга диапазоном возможных значений (см. табл. 1). В словосочетаниях short int и long int описатель int можно опустить. Каждый из целочисленных типов может быть знаковым (signed) или беззнаковым (unsigned). По умолчанию, тип целых величин – знаковый. Если перед определением типа стоит ключевое слово unsigned, то тип целого числа беззнаковый. Так, для того, чтобы объявить переменную x как короткое целое знаковое число, нужно записать:
short x;
а чтобы указать, что оно короткое беззнаковое –
unsigned short x;
Переменная без знака может принимать только неотрицательные значения, переменная со знаком – как неотрицательные, так и отрицательные значения.
Тип int совпадает либо с short, либо с long. В современных аппаратно-операционных средах int можно принимать за полный аналог long, хотя некоторое время назад, в эпоху распространения 16-разрядной аппаратной базы, int совпадал с short.
Целое число может быть непосредственно записано в программе в виде константы. Запись чисел соответствует общепринятой нотации. Примеры целых констант: 0, 125, -37. По умолчанию целые константы принадлежат к типу int.
Кроме стандартной десятичной записи, числа можно записывать в восьмеричной или шестнадцатеричной системе счисления. Признаком восьмеричной системы счисления является цифра 0 в начале числа, признаком шестнадцатеричной – 0х или 0Х перед числом. Для записи шестнадцатеричных цифр используются большие или маленькие латинские буквы от А до F.
const int x = 240;
const int y = 0360;
const int z = 0xF0;
Отрицательные числа предваряются знаком “минус” (-).
Для целых чисел определены стандартные арифметические операции сложения (+), вычитания (-), умножения (*), деления (/), нахождение остатка от деления (%), изменение знака (-). Результатом этих операций также является целое число. При делении остаток отбрасывается.
Кроме стандартных арифметических операций, для целых чисел определен набор побитовых (или поразрядных) операций. В них целое число рассматривается как строка битов (нулей и единиц при записи числа в двоичной системе счисления или разрядов машинного представления числа).
К этим операциям относятся поразрядные (побитовые) операции И (&), ИЛИ (|), ИСКЛЮЧАЮЩЕЕ ИЛИ (^) и НЕ (отрицание) (~), а также поразрядные сдвиги. Поразрядные операции И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ и НЕ выполняют операцию над соответствующими отдельными битами своих операндов, их результаты приведены в таблице 2.
Таблица 2. Результаты выполнения побитовых операций
Операции сдвига, обозначаемые << и >>, сдвигают двоичное представление левого операнда в “указываемую” сторону на количество битов, соответствующее значению правого операнда.
При сдвиге влево число дополняется нулями справа. При сдвиге вправо значение, которым дополняется число, определяется тем, знаковое оно или беззнаковое. Беззнаковые числа при сдвиге вправо всегда дополняются нулями. Если же число знаковое, то для дополнения используется значение самого левого бита числа. Это объясняется тем, что во внутреннем представлении целых чисел в компьютере самый левый бит как раз и является знаком: 0 означает плюс, 1 означает минус.
Рассмотренные арифметические и поразрядные операции выполняются над целыми числами и в результате дают целое число. В отличие от них операции сравнения выполняются над целыми числами, но в результате дают логическое значение истина (true) или ложь (false).
Для целых чисел определены операции сравнения: равенства (= =), неравенства (!=), больше (>), меньше (<), больше или равно (>=) и меньше или равно (<=).
В языке C++ допустимо смешивать различные целые типы в выражении. Общее правило преобразования целых типов состоит в том, что более короткий тип при вычислениях преобразуется к более длинному. Только при выполнении присваивания более длинный тип может преобразовываться к более короткому. Такое преобразование не всегда безопасно, при нем могут потеряться значащие цифры. Обычно компиляторы выдают предупреждение или ошибку, встречая такое преобразование.