Числови типове данни. Основни операции в С/C++. Видове, приоритет, ред за обработване на операндите, преобразуване на типове. Присвояване - единично и верижно.
1. Оператори:
а) оператор за присвояване - "="
променлива = стойност;
Пример:
a=5;
x=0;
a=b;
За разлика от други езици за програмиране операторът за присвояване в C++ връща стойност:
Пример:
a = 2 + (b = 5);
е еквивалентно на:
b = 5;
a = 2 + b;
Пример:
a = b = c = 5; - това присвояване се нарича верижно
б) аритметични оператори:
събиране "+"
изваждане "-"
умножение "*"
деление "/"
остатък при деление "%"
Примери:
a = 2+10;
b = c - 1;
d = b * 101;
e = 5/2;
x = 5 % 2;
в) унарни оператори - "++", "--"
a++; - еквивалентно на a = a+1;
b--; - еквивалентно на b = b-1;
г) съставни оператори ( +=, -=, *=, /=, %=, >>=, &=, ^=, |= )
Примери:
a += 1; - еквивалентно на a = a+1
b - = 1; - еквивалентно на b = b-1
a *= 2; - еквивалентно на a = a*2
b / = 2; - еквивалентно на b = b/2
д) оператори за сравнение - резултатът от тяхното изпълнение е лъжа или истина:
== - равно;
!= - различно
> - по-голямо
< - по-малко
>= по-голямо или равно
<= по-малко или равно
Примери:
(7 == 5) - false
(5>4) - true
(3!=2) - true
(6>=6) - true
(5<5) - false
е) логически оператори
! - логическо "не" (NOT)
&& - логическо "и" (AND)
|| - логическо "или" (OR)
Примери:
!(5==5) - false
Taблица на истинност за логическите функции (приемаме, че 0 - лъжа, 1 - истина):
|
a |
b |
AND |
OR |
|
0 |
0 |
0 |
0 |
|
0 |
1 |
0 |
1 |
|
1 |
0 |
0 |
1 |
|
1 |
1 |
1 |
1 |
Пример:
( (5 == 5) && ( 3> 6) ) - връща стойност false
( (5 == 5) || ( 3> 6) ) - връща стойност true
ж) оператор за условие (?)
условие ? резултат1 : резултат2 - ако резултатът от условието е истина се изчислява резултат1, а ако е лъжа - изчислява се резултат2
Пример:
7 = = 5 ? 4 : 3 - условието не е вярно, затова изразът връща 3
7 = = 5+2 ? 4 : 3 - условието е вярно, затова изразът връща 4
a > b ? a : b - връща като стойност по-голямото от двете числа а и b
з) побитови операции:
& - И
Taблица на истинност:
|
а |
b |
а&b |
|
0 |
0 |
0 |
|
0 |
1 |
0 |
|
1 |
0 |
0 |
|
1 |
1 |
1 |
| - ИЛИ
|
а |
b |
а || b |
|
0 |
0 |
0 |
|
0 |
1 |
1 |
|
1 |
0 |
1 |
|
1 |
1 |
1 |
^ - Изключващо ИЛИ
|
а |
b |
а^b |
|
0 |
0 |
0 |
|
0 |
1 |
1 |
|
1 |
0 |
1 |
|
1 |
1 |
0 |
~ - НЕ
|
а |
~ а |
|
0 |
1 |
|
1 |
0 |
<< - преместване наляво с 1 разряд
>> - преместване надясно с 1 разряд
Пример:
Нека а=195 (10)-> 11000011 (2)
b=87 (10) -> 01010111 (2)
c=a&b -> 01000011 (2)
2. Приоритет на операциите
Нека е даден изразът: а = 5 + 7 % 2
На колко ще бъде равна променливата а след като се извърши действието?
а = 5 + (7 % 2) ; а = 6;
|
Приоритет |
Оператор |
Описание |
Асоциативност |
|
1 |
:: |
област на видимост |
лява |
|
2 |
() [] -> |
|
лява |
|
3 |
++ -- |
увеличаване/намаляване |
дясна |
|
~ |
побитово отрицание |
||
|
! |
отрицание |
||
|
& * |
адрес и стойност |
||
|
(тип) |
преобразуване на тип |
||
|
4 |
* / % |
аритметични операции |
лява |
|
5 |
+ - |
аритметични операции |
лява |
|
6 |
<< >> |
побитово преместване |
лява |
|
7 |
< <= > >= |
оператори за сравнение |
лява |
|
8 |
== != |
оператори за сравнение |
лява |
|
9 |
& ^ | |
побитови операции |
лява |
|
10 |
&& || |
логичски операции |
лява |
|
11 |
?: |
условие |
лява |
|
12 |
= += -= *= /= %= >>= <<= &= ^= |= |
присвояване |
дясна |
|
13 |
, |
запетая |
лява |
3. Преобразуване на типове:
а) явно преобразуване
int i;
float f=3.14;
i = (int) f;
или i= int (f);
б) неявно преобразуване
int i;
printf("%f",3.14*2);
sizeof ( променлива или тип ) - връща броя на байтовете на променливата
Пример:
a = sizeof ( char ); - връща стойност 1