color = 3; /* несоответствие типа */
Позже мы рассмотрим другие ограничения при использовании констант и переменных типа enum. Сначала более внимательно рассмотрим значения констант типа enum.
Значения по умолчанию
Наш пример проиллюстрировал присваивание константам значений по умолчанию. Константам, появляющимся в описании enum, присваиваются целые числа 0, 1, 2 и т. д. в порядке их расположения. Так, описание
enum kids {nippy, slats, skip, nana, liz};
присваивает nаnа значение 3.
Присвоенные значения
Можно выбирать значения, которые вы хотите присвоить константам, но они должны быть целого типа (включая char). Для этого включите желаемыe значения в описание:
enum levels {low = 100, medium = 500, high = 2000};
Если вы присваиваете какое-либо значение одной константе и не присваиваете ничего константам, следующим за ней, то им будут присвоены последовательные значения, идущие за явно присвоенным значением. Например,
enum feline {cat = 20, tiger, lion, puma};
присваивает переменной tiger значение 21, переменной lion - значение 22 и puma - значение 23.
Операции
Теперь рассмотрим, что можно и нельзя делать с величинами типа enum.
Вы можете присвоить константу типа enum переменной того же типа
enum feline pet;
pet = tiger;
Нельзя использовать другие операции присваивания:
pet += cat; /* недопустимо */
Можно провести сравнение с целью выявления равенства или неравенства:
if ( per = = cat) ...
if ( color ! = violet)...
Нельзя использовать другие операции отношения:
if(color > yellow) /* недопустимо */
Можно применять арифметические операции к константам типа enum:
color = red + blue;
pet = puma * lion;
Имеют ли такие выражения какой-то смысл - это уже другой вопрос.
Нельзя использовать арифметическиe операции для переменных типа enum:
color = color + green; /* недопустимо */
Нельзя использовать операции yвеличения и уменьшения:
color++ ; /* недопустимо */
Нельзя использовать константу типа enum для индекса массива:
marbles[red] = 23; /* недопустимо */
ПРИМЕНЕНИЕ
Основная причина использования типа enum заключается в улучшении читаемости программ. Если вы имеете дело с некоторым видом цветовых кодов, то использование red и blue что обычно типы enum предназначены для использования внутри программы, а не для ввода-вывода. Например, если вы хотите ввести значение для переменной color типа spectrum, то должны были бы ввести, скажем, целое число 1, а не слово orange. (Конечно, можно было бы создать функцию ввода, которая восприняла бы строку "orange" и затем преобразовала бы ее в целое число orange.)
ПРИЛОЖЕНИЕ К. ТАБЛИЦА КОДОВ ASCII
Числовые преобразования
Числовые преобразования десятичное - шестнадцатеричное - восьмеричное - двоичное - ASCII
Десятеричное | Шестнадцатеричное | Восьмеричное | Двоичное | ASCII | Ключ* |
X10 | X16 | X8 | PXx | ||
0 | 0 | 0 | 0 | NUL | CTRL/I |
1 | 1 | 1 | 10000001 | SOH | CTRL/A |
2 | 2 | 2 | 10000010 | STX | CTRL/B |
3 | 3 | 3 | 11 | ЕТХ | CTRL/C |
4 | 4 | 4 | 10000100 | EOT | CTRL/D |
5 | 5 | 5 | 101 | ENQ | CTRL/E |
6 | 6 | 6 | 110 | АСК | CTRL/F |
7 | 7 | 7 | 10000111 | BEL | CTRL/G |
8 | 8 | 10 | 10001000 | BS | СTRL/H,возврат |
9 | 9 | 11 | 1001 | HT | CTRL/I,табуляция |
10 | 0А | 12 | 1010 | LF | CTRL/J,новая строка |
11 | 0B | 13 | 10001011 | VT | CTRL/K |
12 | 0С | 14 | 1100 | FF | CTRL/L |
13 | 0D | 15 | 10001101 | CR | CTRL/M,возврат |
14 | 0E | 16 | 10001110 | SO | CTRL/N |
15 | 0F | 17 | 1111 | SI | CTRL/O |