- Ч
МИКРОКОНТРОЛЛЕРЫ
J
Первая программа
для
АТМЕОА128
^
Продолжение. Начало
в
№11/2008
Помимо имени, с каждой переменной связано поня-
тие
типа
данных. Информация о типе данных нужна ком-
пилятору для того, чтобы правильно построить код, обес-
печивающий работу с этой переменной. В языке С суще-
ствует заранее предопределенный набор типов данных,
которые называются
встроенными
(built-in). Как с ними
работать, компилятор “знает” без дополнительных ука-
заний - этим “знанием” его снабдили разработчики ком-
пилятора. Например, если в программе указано, что пе-
ременная X имеет тип данных
unsigned char,
компиля-
тор уже “знает”, что переменная занимает в памяти ров-
но один байт, что при операциях сравнения учитывать
знаковый бит не нужно, что сложение переменной с дру-
гой переменной можно выполнить одной командой add и
т.п. Встроенные типы в языке С делятся на две группы -
группа
целых
чисел, и группа
вещественных
чисел. В груп-
пу целых чисел входят типы
char
(целое число размером
один байт),
short
(целое число размером 2 байта),
int
(то
же, размером 4 байта) и
long
(то же, размером 4 байта).
На 64-битных компьютерах и некоторых типах 32-битных
компьютеров тип long занимает 8 байт. Целые числа
все-
гда
хранятся в дополнительном коде (о нем мы говорили
при описании микроконтроллера КР1878ВЕ1), поэтому
компилятору важно “знать”, каким образом использовать
старший бит числа. Если этот бит следует рассматривать,
как знаковый бит, число считается знаковым
(signed),
если нет - число считается беззнаковым
(unsigned).
Без
этого указания компилятор “считает”, что число содер-
жит знаковый бит, поэтому ключевое слово unsigned тре-
буется указывать явно, а ключевое слово signed можно
не указывать. Бит этот влияет на результат операций срав-
нения (арифметика в дополнительном коде, как мы в свое
время выяснили, анализа знакового бита не требует).
Группа вещественных чисел в языке С представлена дву-
мя типами -
float
(вещественное число точностью до 6
значащих цифр после запятой) и
double
(точностью до
15' значащих цифр после запятой). Размер типа данных
float -'обычно 4 байта, типа данных double - 8 байт. Клю-
чевые слова signed или unsigned для этого типа данных
не применяются - вещественные числа хранятся в пря-
мом коде с явно выделенным битом знака. Выбор для
переменной одного из типов данных обуславливается
требованиями алгоритма - вещественные числа име-
ют огромный диапазон представления (как минимум,
от 1038 до 1038), но не обеспечивают абсолютной точности
представления (число 3 в вещественной форме практи-
чески всегда выглядит как 2.999999). Целые числа, напро-
тив, обеспечивают точное представление, но диапазон
представления их не так широк - для самого “длинного”
типа unsigned long - “всего” около 4 миллиардов, а для са-
мого “короткого” char - всего ±127. Согласно синтаксису
Радиолюбитель - I 2 /2 0 0 8 Ц~
Александр Черномырдин
г. Магнитогорск
E-mail:
chav1961@radioliga.com
языка С, тип данных указывается перед именем перемен-
ной, так что мы, наконец, можем определить, что обозна-
чает запись под номером <1 > в нашей программе - это
описание переменной размером один байт, не использу-
ющей знаковый бит, которая называется ledTurned, и в
которой к моменту начала работы программы должно хра-
ниться значение 0. Конструкция из знака равенства пос-
ле имени переменной (в языке С это знак присваивания),
за которым следует некоторое число (в общем случае -
некоторая формула), называется
инициализацией
пере-
менной. Это значение потом может быть заменено дру-
гим значением, но первоначально в переменной будет
располагаться именно то, что было записано после зна-
ка присваивания. Заполнением первоначальных значе-
ний в переменные занимается специальный участок про-
граммы на языке С, автоматически создаваемый ком-
пилятором, который носит в программистской литера-
туре название пролога (программисту он не виден, да,
откровенно говоря, и не нужен). Обратите внимание -
каждый оператор языка С всегда (за одним исключени-
ем, которое мы рассмотрим позже) заканчивается сим-
волом
Где описанная переменная будет расположе-
на в ОЗУ - не суть важно, пусть об этом болит голова у
компилятора языка С, мы же продолжим разбор фраг-
мента программы.
Понятно, что списком встроенных типов не исчерпы-
ваются все потребности программиста, разрабатываю-
щего программу за языке С. Однако, если разработчики
языка С попытались бы удовлетворить нужды всех про-
граммистов, пишущих на языке С, список встроенных
типов языка неоднократно обогнул бы Землю по эквато-
ру. Поэтому разработчики практически всех языков про-
граммирования (а не только языка С) вместо бесконеч-
ного расширения списка встроенных типов языка предо-
ставляют программистам средства
образования новых
типов
данных. Таких средств образования новых типов
данных в языке С три:
образование массива
образование структуры
образование указателя
Массив данных образуется из нескольких одинаковых
элементов. Например, дом - это
массив
квартир (в смыс-
ле почтового адреса, а не площади или количеств ком-
нат в квартире). Для описания массива в языке С необхо-
димо после имени переменной в квадратных скобках ука-
зать, сколько элементов должен содержать описываемый
ей массив. В нашем примере под номером <2> все опи-
санные массивы имеют по 8 элементов. Конструкция ини-
циализации массива более замысловатая - после знака
равенства в фигурных скобках записаны значения, кото-
рые перед началом работы программы должен получить
первый, второй, третий.
.. восьмой элемент массива.
Чтобы у читателя не сложилось ложного впечатления,
предыдущая страница 37 Радиолюбитель 2008-12 читать онлайн следующая страница 39 Радиолюбитель 2008-12 читать онлайн Домой Выключить/включить текст