В СИ имеется несколько целых типов данных, отличающихся размером памяти, отводимой для хранения значения данного, и способом записи знака значения. Для объявления целых переменных используются спецификаторы_типа представленные в табл.1
Таблица 1
Тип
Размер в байтах
Диапазон значений
char
от -128 до 127
int
2 или 4
как long или short
short
от -32768 до 32767
long
от -2 147 483 648 до 2 147 483 647
unsigned сhar
oт 0 до 255
unsigned int
2 или 4
как unsigned long или unsigned short
unsigned short
от 0 до 65535
unsigned long
от 0 до 4 294 967 295
Заметим, что ключевые слова signed и unsigned необязательны. Они указывают как интерпретируется нулевой бит объявляемой переменной, т.е., если указано ключевое слово unsigned, то нулевой бит интерпретируется как часть числа, в противном случае нулевой бит интерпретируется как знаковый. В случае отсутствия ключевого слова unsigned целая переменная считается знаковой. В том случае, если спецификатор_типа состоит из ключевого типа signed или unsigned и далее следует идентификатор переменной, то она будет рассматриваться как переменная типа int.
Cпецификатор_типа char требуется для представления символьных переменных, которые в СИ могут использоваться как арифметические данные. Значением объекта типа char является код (размером 1 байт) соответствующий представляемому символу. Для представления символов русского алфавита необходимо использовать тип unsigned char, так как коды русских букв превышают величину 127.
Например:
unsigned int n;
unsigned int b;
signed char lat;
unsigned char rus;
int c; (подразумевается signed int c )
unsigned d; (подразумевается unsigned int d )
signed f; (подразумевается signed int f )
Следует сделать следующее замечание, в языке СИ не определено представление в памяти и диапазон значений для переменных со спецификаторами_типа int и unsigned int. Размер памяти для переменной типа int определяется длиной машинного слова, которое имеет различный размер на разных машинах. Так на 16-ти разрядных машинах размер слова равен 2-м байтам, на 32-х разрядных машинах соответственно 4-м байтам, т.е. тип int эквивалентен типам short int, или long int в зависимости от архитектуры используемой ПЭВМ. Таким образом, одна и та же программа может правильно работать на одном компьютере и неправильно на другом.
Целая константа - это число записанное в программе в десятичной, восьмеричной или шестнадцатеричной форме. Десятичная целая константа может состоять из десятичных цифр, причем первая цифра не должна быть нулем. Восьмеричная константа состоит из обязательного нуля и одной или нескольких восьмеричных цифр (среди цифр должны отсутствовать восьмерка и девятка, так как эти цифры не входят в восьмеричную систему счисления). Шестнадцатеричная константа начинается с обязательной последовательности 0х или 0Х и содержит одну или несколько шестнадцатеричных цифр (цифры представляющие собой набор цифр шестнадцатеричной системы счисления: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
Примеры целых констант:
Десятичная
Восьмеричная
Шестнадцатеричная
0x10
0x2B
0xF0
Если требуется сформировать отрицательную целую константу, то используют знак "-" перед записью константы (который будет называться унарным минусом). Например: -0x2A, -088, -16 .
Для того чтобы любую целую константу определить типом long, достаточно в конце константы поставить букву "l" или "L", для того, чтобы сделать константу беззнаковой, можно использовать букву u или U . Буквы L и U можно использовать одновременно. Пример:
5l, 6l, 128L, 0105L, OX2A11L, 0x004000c2ul.
В заголовочном файле values.h есть встроенные константы MAXINT и MAXLONG позволяют определить границы диапазонов целых типов int и long.