Урок 3.1.1. Целые константы

3.1.1. Целые константы

Целая константа - это число, записанное в программе без десятичной точки и без показателя степени. Целые константы в Си могут быть:

-         десятичными;
-         восьмеричными;
-         шестнадцатеричными.

Систему счисления константы компилятор распознает по форме ее записи следующим образом:

Если константа записана цифрами 0 - 9 и первая цифра не 0, то константа десятичная. Например, 45 и 37. Если константа записана цифрами 0 - 7 и первая цифра 0, то константа восьмеричная. Например, 045 и 037. Если константа записана цифрами 0 - 9, буквами A - F или a - f и начинается с 0Х или 0х, то константа шестнадцатеричная. Например, 0Х45 и 0х37.

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

В зависимости от значения константы и от архитектуры компьютера компилятор выделяет для ее машинного представления 2 или 4 байта памяти. На современных компьютерах вы вряд ли увидите 2 байта для целых констант. Для хранения целых типов выделяется 4 байта. Для того, чтобы узнать сколько байт занимает константа или переменная можно использовать операцию sizeof (Урок 4.7. Операция размер). Например, sizeof(25)  даст 4, а sizeof (7984222238294967284) - 8, т.к. тип этой константы long long int.

Для значений от -32768 до 32 767 выделяется 2 байта, в которых первый бит интерпретируется как знак константы, а оставшиеся 15 битов определяют ее значение. В этом случае константа имеет тип int (целый).

Для значений от 0 до 65 535 также выделяется два байта памяти, но уже все 16 бит определяют значение константы. Такая константа имеет тип unsigned int (беззнаковый целый). Константы этого диапазона, записанные со знаком минус, рассматриваются как беззнаковые к которым применяется операция "унарный минус".

Для значений от-2 147483 648 до 2 147 483 647 выделяется 4 байта, в которых первый бит интерпретируется как знак, а оставшиеся 31 бит, как значение числа. Такие константы имеют тип long (длинный).

Для значений от 0 до 4 294 967 295 выделяются 4 байта, в которых все 32 бита интерпретируются как значение. Такая константа имеет тип unsigned long (беззнаковый длинный). Для этого типа к отрицательным константам также применяется операция "унарный минус".

Аналогично выделяется память для восьмеричных и шестнадцатеричных констант, лежащих в соответствующем десятичном диапазоне. Константы, имеющие запись в программе в виде числа больше чем 4 294 967 295 вызывают переполнение однако компилятор не дает предупреждений, а в память записывает младшие биты усеченной константы.

Программист имеет возможность явно указать компилятору, что для какой-либо константы необходимо выделить 4 байта и указать их интерпретацию, как беззнаковую (unsigned). Для этого необходимо использовать соответствующие модификаторы, приписываемые после младшей цифры константы.

Для того чтобы указать, что константа имеет тип long нужно дописать модификатор L или I (допускается также l или i). Например, константы:

846L  054l  0x7A4Fl

будут занимать в памяти четыре байта и иметь тип long несмотря на то, что они по своему значению входят в двухбайтный диапазон int. Для того чтобы указать что константа беззнаковая необходимо дописать U или u. Например, константы: 846U  054U  0x7A4Fu будут занимать в памяти два байта (определяется компилятором по значению) и интерпретироваться как беззнаковые, т.е. будут иметь тип unsigned int. Одновременно в константе можно явно определить и long и unsigned, например так:

235lu  0578ul  0x5ul

Эти константы будут занимать в памяти по четыре байта и интерпретировать как беззнаковые, т.е. иметь тип unsigned long. Порядок дописывания модификаторов безразличен. Таблица 4.1. иллюстрирует типы, диапазоны значений и выделяемую компилятором память для представления целых констант. Ключевые слова в квадратных скобках необязательны  - их можно опускать при записи.

Таблица 4.1. Целые константы

Тип Диапазон значений Память (байты)
[signed] short [int] -32768 ÷ 32767 2
int
[signed] int
-2 147483 648 ÷ 2 147483 647 4
unsigned short [int] 0 ÷ 65535 2
unsigned [int] 0 ÷ 4294967295 4
long
[signed] long [int]
-2 147483 648 ÷ 2 147483 647 4
unsigned long
unsigned long [int]
0 ÷ 4 294 967 295 4
long long int
long long
-9223372036854775808  ÷ 9223372036854775807 8
рассказать друзьям и получить подарок

Оставить комментарий

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

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов