Robotcraft and retrofit
Главная | Синтаксис С | Регистрация | Вход
Четверг
21.11.2024
12:38
Приветствую Вас Гость | RSS
  http://natalia.appmat.ru/c&c++/lezione2.php    
 

Приоритеты операторов

Приоритет Оператор Описание Ассоциативность

1

Наивысший

:: Изменение области видимости Нет
2 ++ Суффиксный инкремент Слева направо
-- Суффиксный декремент
() Вызов функции
[] Взятие элемента массива
. Выбор элемента по ссылке
-> Выбор элемента по указателю
typeid() RTTI (только C++; см typeid)
const_cast Приведение типа (C++) (см const cast)
dynamic_cast Приведение типа (C++) (см dynamic cast)
reinterpret_cast Каламбур типизации (C++) (см reinterpret_cast)
static_cast Приведение типа (C++) (см static cast)
3 ++ Префиксный инкремент Справа налево
-- Префиксный декремент
+ Унарный плюс
- Унарный минус
! Логическое НЕ
~ Побитовое НЕ
(type) Приведение типа
* Разыменование указателя
& Взятие адреса объекта
sizeof Size-of (размер)
new, new[] Выделение динамической памяти (C++)
delete, delete[] Освобождение динамической памяти (C++)
4 .* Указатель на член (C++) Слева направо
->* Указатель на член (C++)
5 * Умножение
/ Деление
% Получение остатка от деления
6 + Сложение
- Вычитание
7 << Побитовый сдвиг влево
>> Побитовый сдвиг вправо
8 < Меньше
<= Меньше или равно
> Больше
>= Больше или равно
9 == Равенство
!= Неравенство
10 & Побитовое И (and)
11 ^ Побитовое исключающее ИЛИ (xor)
12 | Побитовое ИЛИ (or)
13 && Логическое И
14 || Логическое ИЛИ
15 ?: Тернарная условная операция Справа налево
16 = Присваивание
+= Сложение, совмещённое с присваиванием
-= Вычитание, совмещённое с присваиванием
*= Умножение, совмещённое с присваиванием
/= Деление, совмещённое с присваиванием
%= Вычисление остатка от деления, совмещённое с присваиванием
<<= Побитовый сдвиг влево, совмещённый с присваиванием
>>= Побитовый сдвиг вправо, совмещённый с присваиванием
&= Побитовое "И", совмещённое с присваиванием
|= Побитовое "ИЛИ", совмещённое с присваиванием
^= Побитовое "исключающее ИЛИ" (xor), совмещённое с присваиванием
17 throw

Оператор создания исключения (C++)

18 , Оператор «запятая» Слева направо

 


Операторы сравнения

   Оператор     Синтаксис
Равенство a == b
Неравенство a != b
Больше a > b
Меньше a < b
Больше или равно a >= b
Меньше или равно a <= b

 

Логические операторы

Оператор Синтаксис
Логическое отрицание, НЕ !a
Логическое умножение, И a && b
Логическое сложение, ИЛИ a || b

 

Составное присваивание

Оператор

Синтаксис

Значение

Сложение, совмещённое с присваиванием

a += b

a = a + b

Вычитание, совмещённое с присваиванием

a -= b

a = a - b

Умножение, совмещённое с присваиванием

a *= b

a = a * b

Деление, совмещённое с присваиванием

a /= b

a = a / b

Вычисление остатка от деления, совмещённое с присваиванием

a %= b

a = a % b

Побитовое "И" (AND), совмещённое с присваиванием

a &= b

a = a & b

Побитовое "ИЛИ" (or), совмещённое с присваиванием

a |= b

a = a | b

Побитовое "исключающее ИЛИ" (xor), совмещённое с присваиванием

a ^= b

a = a ^ b

Побитовый сдвиг влево, совмещённый с присваиванием

a <<= b

a = a << b

Побитовый сдвиг вправо, совмещённый с присваиванием

a >>= b

a = a >> b

 

for (i = 1; i < 10; i++)

{ ...

}

 

Операторы условных и безусловных переходов

Для организации условных и безусловных переходов в программе на языке СИ (C)используются операторы: if - else, switch и goto. Первый из них записывается следующим образом:

if (проверка_условия) оператор_1; else оператор_2;

Если условие в скобках принимает истинное значение, выполняется оператор_1, если ложное - оператор_2. Если вместо одного необходимо выполнить несколько операторов, то они заключаются в фигурные скобки. В операторе if слово else может отсутствовать.

В операторе if - else непосредственно после ключевых слов if и else должны следовать другие операторы. Если хотя бы один из них является оператором if, его называют вложенным. Согласно принятому в языке СИ (C)соглашению слово else всегда относится к ближайшему предшествующему ему if.

Оператор switch позволяет выбрать одну из нескольких альтернатив. Он записывается в следующем формальном виде:

switch (выражение)

{

case константа_1: операторы_1;

break;

 

case константа_2: операторы_2;

break;

........ ........

default: операторы_default;

}

 
 
 

 

 
 

 

 
     
 

10010 | 1001111 // "ИЛИ" - только 0 и 0 дают 0 
                    //     англ. название  OR

   1011111  // это результат

// только биты_5 в обоих числах были нули

 

 

10010 &  1001111 // "И" - только 1 и 1 дают 1
                    //    англ. название   AND

      10  // это результат

// только биты_2 в обоих числах были единицы

 

10010 ^ 1001111 
/* "исключающее ИЛИ" - результат любое из пары чисел в котором инвертированы биты напротив битов равных "1" в другом числе. 

англ. название  XOR*/

         1011101  // это результат

/* изменились биты во втором числе напротив 
   установленных битов 4 и 1 первого числа. */

 

~  1001111 /* инвертировать биты 
те что были "1" станут "0" и наоборот  */

   110000  // это результат

 
     
 

PORTA++;   /* Эта строчка на Си означает
Взять значение переменной PORTA добавить к ней 1 и записать результат обратно в PORTA

говорят: Инкрементировать регистр PORTA */

PORTC--;      /* Эта строчка на Си означает
                обратное действие! 

Декрементировать - вычесть 1 из значения регистра PORTC  */

 
 

Логические операции :

|| // "ИЛИ" - только "ложь" и "ложь" 
  
//          дают "ложь"  


&&  //  "И" - только "истина" и "истина" 
         //         дают "истина"   

  // "НЕ" - логическое отрицание

/*   Правило - в Си считается:

"Ложь" (False) только ноль.

"Истина"(True)- не ноль. или так:  (!0)

*/

!(истина) // дает "ложь"   

!(ложь)    // дает "истина"

 


 

 
 

Операторы сравнения (или отношения): используются для сравнения переменных, чисел (констант) и выражений.

x < y  // X меньше Y
x > y  // больше
x <= y // меньше или равно
x >= y // больше или равно
x == y // равно
x != y /* не равно

Результат выполнения этих операторов: 

"истина" это "1" (точнее "не ноль")

 "ложно" это "0"  

Значения хранимые в переменных (в регистрах) х и у НЕ изменяются.

Берутся (считываются) значения хранящиеся (или содержащиеся) в переменных и сравниваются  */

! /*  "НЕ" - логическое отрицание */


 

 
     
 

if(){}else{};  идеальная конструкция если вам нужно выполнить какую то часть программы при наличии каких либо условий :

if (выражение) { /* делать этот код если выражение "истина" - т.е. результат его вычисления не ноль */
                }
else {
/* делать этот код если выражение "ложь" - т.е. результат его вычисления равен нулю */
             };


 

 
 

} else {     это не обязательный элемент конструкции :

if (выражение) { /* делать этот код если выражение "истина" - т.е. результат его вычисления не ноль */
               };


  while(){}; условный цикл - используйте если вам 
нужно выполнять какой то код программы пока выполняется (существует, 
справедливо, не ноль) некоторое условие :

while (выражение) { /* делать этот код если выражение "истина" - т.е. результат его вычисления не ноль.

Пока выполняется этот код выражение не проверяется на истинность !

После выполнения кода происходит переход к строке while снова проверять истинность выражения */
                  };

 
 

for(;;){};   - этот цикл позволяет выполнить часть  программы нужное число раз:

char i; /* объявление переменной для for

это обычная переменная и значит может иметь любое  допустимое имя по вашему желанию */

for (i=5;i<20;i+=4) {  /*  код цикла for

i=5 - это начальное выражение 

Число 5 просто для примера, может быть таким, как позволяет объявление переменной i, в нашем случае от 0 до 255

i<20 - контрольное выражение

Может быть с разными операторами отношения, важно лишь чтобы по ходу цикла оно становилось когда-то "ложью" - иначе цикл "зациклится" т.е. ни когда не кончится. 

i+=4 - счетчик

Обычно это i++ т.е.к переменной добавляется 1 каждый "прогон" цикла. Но опять же может быть таким какое вам требуется, важно лишь достижение когда либо условия абзацем выше ! Иначе цикл станет бесконечным.  

Код цикла for будет первый раз выполнен для i=5, затем по выражению i+=4, i станет 9 

теперь будет проверено контрольное выражение i<20

и так как 9<20 код цикла for будет выполнен еще раз.

Так будет происходить до тех пор пока контрольное выражение "истино" 

Когда оно станет "ложно" цикл for закончится и программа пойдет дальше.  */
                   
                };

 

while(1)

for (;;); 

/* Так написанные эти циклы означают : 

МК выполнять эту строчку пока есть питание, нет сброса и нет прерывания.

Когда возникает прерывание, программа переходит на обработчик прерывания и (если в обработчике нет перехода в другое место программы)по завершении кода обработчика опять возвращается в такой цикл.   */

 
 

switch(){};  -    оператор множественного выбора, 
позволяет вам сделать выбор из нескольких вариантов.

switch (выражение) {
case 5:

/* этот код будет выполняться если результат вычисления выражения равен числу 5 

на этом работа оператора switch закончится */
break;

case -32:
/* этот код будет выполняться если результат вычисления выражения равен отрицательномц числу -32 

на этом работа оператора switch закончится */
break;

case 'G':
/* этот код будет выполняться если результат вычисления выражения равен числу соответствующему символу G в таблице ASCII 

на этом работа оператора switch закончится */
break;

default:

/* этот код будет выполняться если результат вычисления выражения не равен ни 5 ни -32 ни 'G' 

на этом работа оператора switch закончится */
};

/* switch закончен - выполняется дальнейший код программы */

 



наиболе часто используемые типы данных :

  • unsigned char - хранит числа от 0 до 255 (байт)

  • unsigned int - хранит числа от 0 до 65535 (слово == 2 байта)

  • unsigned long int - хранит от 0 до 4294967295   (двойное слово == 4 байта)


     

 
 

#asm("sei") // Разрешить ГЛОБАЛЬНО все прерывания

#asm("cli") // Запретить ГЛОБАЛЬНО все прерывания

#asm("nop") // Пауза в 1 такт процессора 

#asm("wdr") // Сбросить сторожевой таймер


 

 

 
     

 

Copyright MyCorp © 2024
Бесплатный конструктор сайтов - uCoz