Лабораторная работа: Операции языка Cи
y >>3=1111 01102>>3=1111 11102= -2
z >>3=0001 01002>>3=0000 00102= 2
24-26. Операции отношения и сравнения обычны. В случае истины они возвращают 1, при нарушении возвращают 0.
27-29. Побитовые операции применяются для целых аргументов.
Таблица4.
Таблицы истинности
& | 0 | 1 | ^ | 0 | 1 | | | 0 | 1 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
Пример.
7 & 9 = 00000111 & 00010001 = 000000012 = 1
7 ^ 9 = 00000111 ^ 00010001 = 000101102 = 22
7 | 9 = 00000111 | 00010001 = 000101112 = 23
30-31. Логические операции возвращают 1 (истину) или 0 (ложь).
Компилятор оптимизирует логические выражения таким образом, что если по результату вычисленного подвыражения можно сделать вывод относительно результата всего выражения, то дальнейшее вычисление выражения не выполняется.
Пример.
7 && 9 = 1
32. Операция «Условие» позволяет иногда заменить условный оператор if-else на операцию.
Пример. Максимальное из двух чисел равно max = (x > y) ? x : y;
Максимальное из трех чисел равно
max = (x>y) ? ( x >z?x:z) : ( y>z?y:z);
33. Результатом присваивания является значение того, что присвоено левому аргументу.
34. Комбинированное присваивание x op = y является компактной записью оператора x = x op y . Однако компилятор эту замен не производит. Комбинированное присваивание является отдельной операцией.
35. «Запятая» является, пожалуй, самой экзотической операцией языка Си. Результатом выражения x ,y является число y .
Пример.
x = 2,5; // x = 2, так как присваивание сильнее запятой
x = (2,5); // x = 5
По-видимому, здесь хотели написать x=2.5
Правила преобразований типов
В выражениях
Если операнд имеет тип не int и не double, то сначала приводится:
- signed char --> int расширением знакового бита (7)
- unsigned char --> int дополнением нулями слева
- short --> int расширением знакового бита (15)