int iVar1=0x5f, iVar2=0xa9;
int iResult;
iResult=iVar1&iVar2; // поразрядное логическое И
printf("iResult=%xh\n",iResult); // 9h
iResult=iVar1|iVar2; // поразрядное логическое ИЛИ
printf("iResult=%xh\n",iResult); // ffh
iResult=iVar1^iVar2; // поразрядное искл. ИЛИ
printf("iResult=%xh\n",iResult); // f6h
int iVar3=0x25,iVar4=0xa4;
iVar3+=iVar4;
printf("iVar3=%oo\tiVar3=%dd\tiVar3=%Xh\t",iVar3,iVar3,iVar3);
// 311 201 c9
Операции присваивания
Знак операции | Название операции |
++ | Увеличение (инкремент) |
-- | Уменьшение (декремент) |
= | Простое присваивание |
+= | Сложение с присваиванием |
-= | Вычитание с присваиванием |
*= | Умножение с присваиванием |
/= | Деление с присваиванием |
%= | Целочисленное деление с присваиванием |
<<= | Сдвиг влево с присваиванием |
>>= | Сдвиг вправо с присваиванием |
&= | Поразрядное логическое И с присваиванием |
|= | Поразрядное логическое ИЛИ с присваиванием |
^= | Поразрядное исключающее ИЛИ с присваиванием |
Примеры:
a+=20; a=a+20;
d%=3.0’ d=d%3;
x*=3*y+12; x=x*(3*y+12);
Терарная операция.
Терарная операция включает в себя выражение с тремя операндами и имеет формат:
операнд1?орперанд2:операнд3;
Операнд1 – арифметическое или логическое выражение-условие.
Операнд2 – результат по выполнению условию.
Операнд3 – результат по не выполнению условию.
Пример:
int x, y=-5;
x=(y<=0)?-y:y;
printf(“x=%d\n”,x); // x=5
Если y<=0 => x=-y
y>0 =>x=y
Приоритеты операций и порядок выполнения
Приоритет | Знак операции | Тип операции |
() []. -> sizeof() | Круглые и квадратные скобки, точка, стрелка | |
2 (*) | - ~! * & ++ -- | Унарные |
* / % | Мультипликативные | |
+ - | Аддитивные | |
<< >> | Побитовый сдвиг | |
< > <= >= | Неравенство | |
==!= | Равенство | |
& | Поразрядное И | |
^ | Поразрядное исключающее ИЛИ | |
| | Поразрядное ИЛИ | |
&& | Логическое И | |
|| | Логическое ИЛИ | |
?: | Условное выражение | |
14 (*) | = *= /= %= += -= <<= >>= | Простое и составное присваивание |
, | Последовательное вычисление |
Замечание: Все операции выполняются слева направо, кроме (*).
Примеры:
y=x/2+a*5%10; // y=(x/2)+((a*5)%10);
a=b+++c/5; // a=(b++)+(c/5);
Преобразование типов:
Рассмотрим три правила преобразования типов.
- Если операция выполняется над данными двух различных типов, обе величины приводятся к “высшему” из двух типов.
- Применение ключевого слова “unsigned” повышает ранг соответствующего типа.
- В операторе присваивания конечный результат вычисления приводится к типу переменной, которой должно быть присвоено это значение.
Существует возможность точно указать тип данных, к которому необходимо привести некоторую величину. Этот способ называется ”приведением типов” и состоит в следующем: перед данной величиной в круглых скобках записывается имя требуемого типа.
Пример:
int iVar;
iVar=1.6+1.7; // 3 (автоматическое преобразование типов)
iVar=(int)1.6+(int)1.7; // 2
(float)9 // 9.0