Int main(void)
{
int x = 100;
printf ("десятичное = %d; восьмеричное = %o; шестнадцатеричное = %x\n", x, x, x) ;
printf("десятичное = %d; восьмеричное = %#o; шестнадцатеричное = %#x\n", x, x, x) ;
return 0;
}
После компиляции и выполнения этой программы получен следующий вывод:
десятичное = 100; восьмеричное = 144; шестнадцатеричное = 64 десятичное = 100; восьмеричное = 0144; шестнадцатеричное = 0x64
Одно и то же значение отображается в трех различных системах счисления. Все преобразования выполняет функция printf (). Обратите внимание, что префиксы О или Ох не отображаются в выводе до тех пор, пока в спецификаторе не будет указан символ #.
Другие целочисленные типы
Если вы просто изучаете язык С, то в большинстве случаев вам, скорее всего, вполне достаточно будет типа int. Однако для полноты картины мы рассмотрим и другие формы целых чисел. При желании вы можете пропустить этот раздел и перейти к обсуждению типа char в разделе “Использование символов: тип char", а затем возвратиться к данному разделу в случае необходимости.
В языке С применяются три ключевых слова, модифицирующих базовый целочисленный тип: short, long и unsigned. Примите во внимание следующие аспекты.
Тип short int, или short, может использовать меньший объем памяти, чем int, и тем самым экономить память в случае, когда требуются только небольшие числа. Подобно int, short является типом со знаком.
Тип long int, или long, может занимать больший объем памяти, чем int, позволяя представлять крупные целочисленные значения. Подобно int, long является типом со знаком.
Тип long long int, или long long (введен стандартом С99), может занимать больше памяти, чем long. Для этого типа используются минимум 64 бита. Подобно int, long long является типом со знаком.
Тип unsigned int, или unsigned, применяется для переменных, которые принимают только неотрицательные значения. Этот тип сдвигает диапазон хранимых чисел. Например, 16-битный тип unsigned int имеет диапазон значений от 0 до 65535 вместо диапазона от -32768 до 32767. Бит, который использовался для представления знака, теперь становится еще одной двоичной цифрой, делая возможным представление большего числа.
Типы unsigned long int, или unsigned long, и unsigned short int, или unsigned short, распознаются как допустимые стандартом С90. В стандарте С99 к ним добавлен тип unsigned long long int, или unsigned long long.
Ключевое слово signed может применяться с любыми типами со знаком, чтобы явно указать свое намерение. Например, short, short int, signed short и signed short int являются именами одного и того же типа.
Объявление переменных других целочисленных типов
Переменные других целочисленных типов объявляются в той же манере, что и переменные типа int. Ниже приведен список примеров объявлений. Не все старые компиляторы С распознают последние три объявления, а финальное объявление соответствует стандарту С99.
long int estine; long johns; short int erns; short ribs; unsigned int s_count; unsigned players; unsigned long headcount; unsigned short yesvotes; long long ago;
Целочисленное переполнение
Что произойдет, если целое число окажется больше, чем допускает выбранный для него тип? Давайте присвоим целочисленной переменной максимально возможное целое значение, добавим к нему еще какое-то целое число и посмотрим, к чему это приведет. Мы выполним это действие над типами со знаком и без знака. (В вызове функции printf () для отображения значений типа unsigned int применяется спецификатор %и.)
/* toobig.c -- превышение максимально возможного значения int в системе */ #include <stdio.h>
