Опепранды и операции
Комбинация знаков операций и операндов, результатом которой является определенное значение, называется выражением. Знаки операций определяют действия, которые должны быть выполнены над операндами. Каждый операнд в выражении может быть выражением. Значение выражения зависит от расположения знаков операций и круглых скобок в выражении, а также от приоритета выполнения операций.
В языке СИ присваивание также является выражением, и значением такого выражения является величина, которая присваивается.
Операнд - это константа, литерал, идентификатор, вызов функции, индексное выражение, выражение выбора элемента или более сложное выражение, сформированное комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который имеет константное значение, называется константным выражением. Каждый операнд имеет тип.
Чтобы поместить число в переменную (в регистр) в языке Си есть оператор присваивания “ =”. Этот символ в Си означает вычислить результат того, что справа от оператора присваивания и поместить этот результат в переменную находящуюся левее оператора присваивания.
Примеры:
1.PORTB=PINB+34;/* Эта строчка на Си означает Взять (прочитать) значение переменной (регистра) PINB, затем прибавить к нему число 34 и поместить результат в переменную PORTB */
2. ПЕРЕМЕННАЯ=PINC; /* Эта строчка на Си означает взять (прочитать) значение переменной (регистра) PINC и поместить результат в переменную с именем ПЕРЕМЕННАЯ */ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3.Строка где переменная стоит слева от “ = “ но через знак &
PORTB& =0x23;
на Си означает - прочитать содержимое переменной PORTB, затем выполнить "поразрядное (побитное) логическое И" между прочитанным значением и числом 0x23 и поместить (записать, присвоить) результат в переменную PORTB
4. Строка где переменная стоит непосредственно слева от “=”
PORTB=0x23;
на Си означает - не читаясодержимое переменной PORTB присвоить ей значение 0x23 уничтожив то что было там раньше.
Есть в Си операции которые изменяют значение переменной и без оператора присваивания : PORTA++;/* Эта строчка на Си означает Взять значение переменной PORTA добавить к ней 1 и записать результат обратно в PORTA .Говорят: Инкрементироватьрегистр PORTA */
PORTC--; /* Эта строчка на Си означает обратное действие! Декрементировать - вычесть 1 из значения регистра PORTC */ Когда инкремент или декремент используется в выражении то важно где стоят два знака + или - перед переменной или после переменной :
|
Do - while
при котором код в { } выполняется по меньшей мере один раз независимо от истинности условия в скобках :
do{код на Си /* выполнить этот код один раз затем, если выражение есть "истина" - т.е. результат его вычисления не ноль - опять выполнить код с начала, и так до тех пор пока выражение истина */ } while (выражение); Циклы for(;;) и while() часто используют вот так: while(1); for (;;); /* Так написанные эти циклы означают : МК выполнять эту строчку пока есть питание, нет сброса и нет прерывания. Когда возникает прерывание, программа переходит на обработчик прерывания и (если в обработчике нет перехода в другое место программы) по завершении кода обработчика опять возвращается в этот цикл. */ while(1){ код программы }; for (;;){ код программы }; 4.for(;;){}; - этот цикл позволяет выполнить часть программы нужное число раз: | |
char i; /* объявление переменной для forэто обычная переменная Си и следовательно может иметь любое допустимое имя по вашему желанию и тип */
for (i=5; i<20; i+=4) {
код на Си /* Вначале будет определено "истинно" или "ложно" контрольное выражение i<20. Так как переменной i присвоено значение 5 то контрольное выражение "истинно" и код цикла forбудет первый раз выполнен для i=5, затем по выражению i+=4, i станет 9 , теперь снова будет проверена истинность (справедливость, выполнение) контрольного выражение i<20 и так как 9<20 код цикла forбудет выполнен еще раз но для i=9. Так будет происходить до тех пор пока результат вычисления контрольного выражения даёт "истинно". Когда результат станет "ложно" - программа выйдет из цикла for не исполняя код. */
};
i = 5 это начальное выражение, то что в начале будет в переменной i.Число 5 просто для примера, может быть таким, как позволяет объявление типа переменной i, в нашем случае это char в большинстве компиляторов по-умолчанию это без знаковый символьный тип - он может хранить числа от 0 до 255
i < 20 - контрольное выражение . Может быть с разными операторами отношения, важно лишь чтобы по ходу цикла оно становилось когда-то "ложью" - иначе цикл "зациклится" т.е. никогда не кончится.
i += 4 - это счетчик или изменение переменной цикла. Обычно это i++ т.е. к переменной добавляется 1 каждый "прогон" цикла. Но опять же может быть таким, какое вам требуется.
Начальным условием- может быть любое допустимое в Си выражение результатом которого является целое число.
Контрольное выражение- определяет до каких пор будет выполнятся цикл.
Счетчик- показывает как изменяется начальное выражение перед каждым выполнением нового цикла .
Выражение - может быть не просто переменная, а функция других переменных, например:
i =(7 + i*4) или i = (функция других переменных).
5. switch(){}; - оператор множественного выбора, позволяет сделать выбор из нескольких вариантов.
Выражение, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, допустимыми в языке СИ, значение которого должно быть целым. Значение этого выражения является ключевым для выбора из нескольких вариантов. Тело оператора switch состоит из нескольких операторов, помеченных ключевым словом case с последующим константным-выражением. Все константные выражения в операторе switch должны быть уникальны. Кроме операторов, помеченных ключевым словом case, может быть, но обязательно один, фрагмент помеченный ключевым словом default. Список операторов может быть пустым, либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки.
Схема выполнения оператора switch следующая:
- вычисляется выражение в круглых скобках;
- вычисленные значения последовательно сравниваются с константными выражениями, следующими за ключевыми словами case;
- если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;
- если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.
Все операторы, между начальным оператором и концом тела, выполняются вне зависимости от ключевых слов, если только какой-то из операторов не передаст управления из тела оператора switch. Таким образом, программист должен сам позаботится о выходе из case, если это необходимо. Чаще всего для этого используется оператор break.
switch (выражение) {
case 5: код на Си
/* этот код будет выполняться если результат вычисления выражения равен числу 5 на этом работа оператора switch закончится */
break;
case -32: код на Си
/* этот код будет выполняться если результат вычисления выражения равен отрицательномц числу -32. На этом работа оператора switch закончится */
break;
case 'G': код на Си
/* этот код будет выполняться если результат вычисления выражения равен числу соответствующему символу G в таблице ASCII .На этом работа оператора switch закончится */
break;
default: код на Си
/* этот код будет выполняться если результат вычисления выражения не равен ни 5 ни -32 ни 'G', а так же после выполнения кода не
имеющего в конце break;
На этом работа оператора switch закончится */
};
/* switch закончен - выполняется дальнейший код программы */
case - может быть столько сколько требуется, чтобы программа работала быстрее наиболее вероятные варианты следует располагать выше.
default - не обязателен. Его можно расположить и не в конце.
break; - если его не использовать то найдя нужный вариант программа будет выполнять и следующие ниже условия case.
6.goto - оператор безусловного (немедленного) перехода.
Оператор goto передает управление на оператор, помеченный меткой имя-метки. Помеченный оператор должен находиться в той же функции, что и оператор goto, а используемая метка должна быть уникальной, т.е. одно имя-метки не может быть использовано для разных операторов программы. Имя-метки - это идентификатор. какой-то код нашей программы на Си ... mesto_5:/* сюда мы попадем после выполнения строки программы goto mesto_5 */ код будет выполнятся после goto mesto_5; ... какой-то код нашей программы на Си ... mesto_1:/* сюда мы попадем после выполнения строки программы goto mesto_1 */ код будет выполнятся после goto mesto_1; ... какой-то код нашей программы на Си ... goto mesto_1;/* перейти в то место программы где в начале строки написано mesto_1: */ ... какой-то код нашей программы на Си ... goto mesto_5;/* перейти в то место программы где в начале строки написано mesto_5: */ ... какой-то код нашей программы на Си . |
Дата добавления: 2016-12-27; просмотров: 1831;