Лекции (опорный конспект)
.pdf3.3.Логические операции
•Выполняются над булевскими операндами
•Возвращают булевское значение
Операция |
Описание |
Пример |
|
|
|
выражения |
|
|
|
|
|
&& |
Логическое «И» |
A && |
B |
|
|
x<=2 |
&& y>3 |
|
|
|
|
| | |
Логическое «ИЛИ» |
x<=2 |
| | y>3 |
|
|
|
|
! |
Логическое «НЕ» |
!A && B |
|
|
|
!(x<=2) |
|
|
|
|
|
A |
B |
!A |
A&&B |
A| |B |
|
|
|
|
|
|
|
Ложь |
Ложь |
Истина |
Ложь |
Ложь |
|
|
|
|
|
|
|
Ложь |
Истина |
Истина |
Ложь |
Истина |
|
|
|
|
|
|
|
Истина |
Ложь |
Ложь |
Ложь |
Истина |
|
|
|
|
|
|
|
Истина |
Истина |
Ложь |
Истина |
Истина |
31 |
|
|
|
|
|
|
3.3. Побитовые логические операции (1)
•Возвращают целочисленное значение
•Выполняются над целочисленными операндами
Операция |
Описание |
Пример |
|
|
выражения |
|
|
|
& |
Побитовое «И» |
A & B |
|
|
|
| |
Побитовое «ИЛИ» |
A | B |
|
|
|
^ |
Побитовое исключающее «ИЛИ» |
A ^ B |
|
|
|
~ |
Побитовое «НЕ» |
~A |
|
|
|
A |
B |
~A |
A&B |
A|B |
A^B |
|
|
|
|
|
|
|
|
0 |
0 |
1 |
0 |
0 |
0 |
|
|
|
|
|
|
|
|
0 |
1 |
1 |
0 |
1 |
1 |
|
|
|
|
|
|
|
|
1 |
0 |
0 |
0 |
1 |
1 |
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
1 |
0 |
32 |
|
|
|
|
|
|
3.3. Побитовые логические операции (2)
unsigned char SW = 0; // |
00000000 |
|
|
|
// Установить значение 1 |
для 1 бита |
|
||
SW = SW | 0x01; |
// |
00000000 |
- |
SW |
|
// |
00000001 |
- |
0x01 |
|
// |
----------------- |
|
|
|
// |
00000001 |
- |
SW |
// Установить значение 1 |
для 3 бита |
|
||
SW = SW | 0x04; |
// |
00000001 |
- |
SW |
|
// |
00000100 |
- |
0x04 |
|
// |
----------------- |
|
|
|
// |
00000101 |
- |
SW |
// Установить значение 0 |
для 1 бита |
|
||
SW = SW & (~0x01); |
// |
00000101 |
- |
SW |
|
// |
11111110 |
- |
~0x01 |
|
// |
----------------- |
|
|
|
// |
00000100 |
- |
SW |
// |
Установить значение 0 |
для 3 бита |
|
||
SW |
= SW & (~0x04); |
// |
00000100 |
- |
SW |
|
|
// |
11111011 |
- |
~0x04 |
|
|
// |
----------------- |
|
|
|
|
// |
00000000 |
- |
SW |
// Изменить значение 4 бита на противоположное
SW = SW ^ 0x08; |
// 00000000 |
- SW |
|
|
// 00001000 |
- |
0x08 |
|
// ----------------- |
|
|
|
// 00001000 |
- |
SW |
// |
Изменить значение 4 бита на противоположное |
|||
SW |
= SW ^ 0x08; |
// 00001000 |
- |
SW |
|
|
// 00001000 - 0x08 |
||
|
|
// ----------------- |
|
|
|
|
// 00000000 |
- |
SW |
33
3.4.Операции сдвига
•Возвращают целочисленное значение
•Выполняются над целочисленными операндами
Операция |
Описание |
|
|
Пример |
|
|
|
выражения |
|
|
|
|
|
|
>> |
Сдвиг вправо |
A |
>> |
2 |
|
|
|
|
|
<< |
Сдвиг влево |
A |
<< |
3 |
|
|
|
|
|
unsigned |
char A = 12; // 00001100 |
(12) |
||||
A |
= |
A << |
2; |
// |
00110000 |
(48) |
A |
= |
A >> |
3; |
// |
00000110 |
(6) |
34
3.5. Приоритет операций
Операция |
Описание |
Приоритет |
|
|
|
! |
Логическое «НЕ» |
1 |
|
|
|
~ |
Побитовое «НЕ» |
1 |
|
|
|
– |
Унарный минус |
1 |
|
|
|
* |
Умножение |
2 |
|
|
|
/ |
Деление |
2 |
|
|
|
% |
Получение остатка от |
2 |
|
деления |
|
|
|
|
+ |
Сложение |
3 |
|
|
|
– |
Вычитание |
3 |
|
|
|
>> |
Сдвиг вправо |
4 |
|
|
|
<< |
Сдвиг влево |
4 |
|
|
|
a +2 b *1 c >=3 d &&4 d < e –2 5
Операция |
|
Описание |
Приоритет |
|
|
|
|
< |
|
Меньше |
5 |
|
|
|
|
<= |
|
Меньше или равно |
5 |
|
|
|
|
> |
|
Больше |
5 |
|
|
|
|
>= |
|
Больше или равно |
5 |
|
|
|
|
== |
|
Равно |
6 |
|
|
|
|
!= |
|
Не равно |
6 |
|
|
|
|
& |
|
Побитовое «И» |
7 |
|
|||
|
|
|
|
^ |
|
Побитовое |
8 |
|
|
исключающее «ИЛИ» |
|
|
|
|
|
| |
|
Побитовое «ИЛИ» |
9 |
|
|
|
|
&& |
|
Логическое «И» |
10 |
|
|
|
|
| | |
|
Логическое «ИЛИ» |
11 |
|
|
|
|
false &&1 false ||2 true
a + b * c >= d && d < e – 5
( ( a + (b * c) ) >= d ) && ( d < (e – 5) )
35
(a + b) * c
3.6.Математические функции (1)
•Основные математические функции определены в заголовочном файле math.h
#include <math.h>
• Функция возведения в степень
double pow(double x, double y);
double x = pow(2,4); // x = 16;
• Функции взятия числа по модулю
• Функции округления
double ceil(double x); double floor(double x);
double a = floor(9.9); // a = 9; double b = floor(9.1); // b = 9; double c = floor(-1.4); // c = -2;
int |
abs(int x); |
|
double |
fabs(double |
x); |
double z = fabs(-1.4); // z = 1.4;
double a = ceil(9.9); // a = 10; double b = ceil(9.1); // b = 10; double c = ceil(-1.4); // c = -1;
36
3.6. Математические функции (2)
double log(double x); |
Натуральный логарифм |
|
|
double log10(double x); |
Десятичный логарифм |
|
|
double sqrt(double x) |
Квадратный корень числа |
|
|
double sin(double x); |
Синус |
|
|
double cos(double x); |
Косинус |
|
|
double tan(double x); |
Тангенс |
|
|
double sinh(double x); |
Гиперболический синус |
|
|
double cosh(double x); |
Гиперболический косинус |
|
|
double tanh(double x); |
Гиперболический тангенс |
|
|
double asin(double x); |
Арксинус |
|
|
double acos(double x); |
Арккосинус |
|
|
double atan(double x); |
Арктангенс |
|
|
double exp(double x); |
Вычисление экспоненты |
|
|
37
4.Операторы языка С++
4.1.Оператор присваивания
•Оператор присваивания позволяет установить новое значение для переменной
Оператор |
Пример |
Эквивалентный |
присваивания |
использования |
оператор |
|
|
|
+= |
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 |
|
|
|
<<= |
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 |
|
|
|
переменная = выражение
X = a + b * c >= d && d < e – 5; D = 2 * a;
A = A + 10;
38
4.2.Инкремент и декремент
•Оператор инкремента (++) увеличивает значение переменной на единицу
•Оператор декремента (--) уменьшает значение переменной на единицу
++c; // префиксный инкремент c++; // постфиксный инкремент
Оператор |
Последовательность |
|
действий |
|
|
x = c++; |
x = c; |
|
c = c + 1; |
|
|
x = ++c; |
c = c + 1; |
|
x = c; |
|
|
x = c--; |
x = c; |
|
c = c - 1; |
|
|
x = --c; |
c = c - 1; |
|
x = c; |
39
4.3. Операторы передачи управления
• Вызов функции
имя_функции(параметр1, параметр2, ...)
function1();
function2(1,2,3);
function3(a,b,c);
a = F(b) + F(c);
• Возврат значения функции
void function1()
{
//...
return;
}
int function2()
{
//...
return 10;
}
• Безусловный переход
// ...
goto label1;
//...
//...
label1: a = 5;
//...
double sum (double a, double b)
{
return a+b;
}
void main()
{
int a = 5; int b = 10;
int c = sum(a,b);
cout << "c = a + b = " << c; getch();
40
}