logo search
ответы

9.Целочисленные типы данных

Размер типа int не определяется стандартом, а зависит от компьютера и компилятора. Для 16-разрядного процессора под величины этого типа отводится 2 байта – в этом случае диапазон возможных значений составляет -32 768 ... 32 767 (2 в степени 16 различных значений). Для 32-разрядного - 4 байта – диапазон значений -2 147 483 648 ... 2 147 483 647 (2 в степени 32 различных значений).

Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта независимо от разрядности процессора.

Спецификатор long означает, что целая величина будет занимать 4 байта. Таким образом, на 16-разрядном компьютере эквиваленты int и short int, а на 32-разрядном — int и long int.

При определении переменных вместо short int или long int можно использовать более короткие обозначения: short или long соответственно:

short a;

long b;

Использование типов int, short int (short), long int (long) подразумевает представление целых чисел со знаком, поэтому спецификатор signed можно не указывать.

Внутреннее представление величины целого типа — целое число в двоичном коде. Например, число +22 типа short int (short) представляются в памяти так:

Номера разрядов: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Значения разрядов: 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 ,

а отрицательное число -22 выглядит следующим образом:

Номера разрядов: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Значения разрядов: 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0

При использовании спецификатора signed (или при его отсутствии) старший бит числа (в данном случае – разряд с номером 15) интерпретируется как знаковый (О — положительное число, 1 — отрицательное).

Спецификатор unsigned позволяет представлять только положительные числа, при этом старший разряд рассматривается как часть кода числа. Таким образом, диапазон значений типа int зависит от спецификаторов. Диапазоны значений величин целого типа со спецификатором unsigned выглядят так:

unsigned int (16-разрядного процессор): от 0 до 65 535;

unsigned int (32-разрядного процессор): от 0 до 4 294 967 295;

unsigned short int или unsigned short (не зависимо от процессора): от 0 до 65 535.

По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно опускать.

Целые константы литералы можно задавать в трех форматах: в десятичном, восьмеричном и в шестнадцатеричном.

В десятичном формате целые значения записываются в обычном виде:

1345 +34 -245

В восьмеричном формате сначала записывается 0 (нуль), а за ним восьмеричные разряды самого числа:

011 07345 -0456

В шестнадцатеричном формате значащим разрядам числа должны предшествовать символы 0x или 0X:

0x12B5 -0xAF2B 0X1FF02

Как уже говорилось ранее, константам, встречающимся в программе, приписывается тот или иной тип в соответствии с их видом. Если этот тип по каким-либо причинам не устраивает программиста, он может явно указать требуемый тип с помощью суффиксов L, l (long) и u, U (unsigned). Например, константа 32L будет иметь тип long и занимать 4 байта. Можно использовать суффиксы L и U одновременно, например, Ox22UL или 05LU.