Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных.

Презентация:



Advertisements
Похожие презентации
Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных.
Advertisements

Практическое занятие ОПЕРАЦИИ (сравнение) Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
Практическое занятие ОПЕРАЦИИ (арифметические, присваивание) Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем.
Практическое занятие Управление потоком команд Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО.
Практическое занятие ОПЕРАЦИИ (логические) Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
Внутреннее представление чисел ( практическое занятие ) Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем.
©ρŧą Базовые конструкции языка.
Введение в C++ Урок 1-2.
Системы счисления и внутреннее представление целых ( практическое занятие ) Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных.
ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем УКАЗАТЕЛИ Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем.
Булевы переменные и функции Булевыми переменными называются переменные, принимающие значение 0 или 1. Булевы (или логические) функции оперируют с булевыми.
Информатика ЕГЭ Уровень-А8. Вариант 1 Укажите логическое выражение, равносильное данному: (А^B) v ((¬B ^ ¬A) v A). 1) (A^ B) v (¬B) 2) (A ^ B) v (¬A)
Булевы функции и алгебра логики. Двойственность булевых функций ХНУРЭ, кафедра ПО ЭВМ, Тел , Лекции 4-5 Н.В. Белоус.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков.
Алгебра логики. Основные понятия Логика Логика - наука о правильном мышлении, или о правилах, которым подчиняется процесс рассуждения. Предметом логики.
Лекция 1 по дисциплине «Программные средства математических расчетов» тема: «Основы языка С++» гр. 8Е31 Мамонова Татьяна Егоровна
©Павловская Т.А. Язык С++ Курс «С++. Программирование на языке высокого уровня» Павловская Т.А.
Занятие 2 (часть 1) Логические формулы. Законы алгебры логики.
Булевы переменные и функции Булевыми переменными называются переменные, принимающие значение 0 или 1. Булевы (или логические) функции оперируют с булевыми.
Алгебра логики. Логика Логика – это наука о формах и законах человеческой мысли, о законах доказательных рассуждений, изучающая методы доказательств и.
Транксрипт:

Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем Дисциплины "ЯЗЫКИ ПРОГРАММИРОВАНИЯ" "ПРОГРАММИРОВАНИЕ" Операции

План лекции © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 2 1.Арифметические операции 2.Операции присваивания, преобразование типов данных. 3.Операции сравнения 4.Логические операции и булева алгебра.

Арифметические операции © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 3 Класс Опер.ОписаниеПример Унарная - Изменение знака int k = -z; + Изменение знака (исп. редко) - Бинарная + Аналогичны математическим операциям z = a + b; -z = a – b; *z = a * b; / Деление char/short/int/long – целая часть от деления float/double/long double – арифметическое z = a / b; % остаток от деления (только целые: char/short/int/long) z = a % b;

Целочисленная арифметика (на базе отрезков) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 4 a b (b / a), (b % a) (b / a)(b % a) (a / b), (a % b) (a % b)(a / b) = 0 a = (a / b)b + (a % b)

Задачи для самостоятельного решения © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 5 / - целая часть от деления % - остаток от деления 1) 15 / 18 2) 10 % 14 3) 105 / 19 4) 98 % 4 5) 100 / 4 6) 32 % 4 7) 1024 / 41 8) 2048 % 41 9) 97 / 2 10) 97 % 2 11) 48 / 2 12) 48 % 2 13) 79 / 4 14) 79 % 4 15) 1024 / 3 16) 1024 % 3

Операции присваивания © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 6 Класс Опер.ОписаниеПример Унарная ++ префиксный инкремент ++i; постфиксный инкремент i++; -- префиксный декремент --i; префиксный декремент i--; Бинарная = присваивание i = j; += присваивание вида: a = b; трактуется как a = a b; например: a += b; эквив. a = a + b; i += j; -=i -= j; *=i *= j; /=i /= j; %=i %= j;...

Базовая операция присваивания ('=') © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 7 = x = 5 y = x z = x + 10 a = z + y + 1 Алгоритм операции присваивания. 1. Вычислить левостороннее значение (lvalue): становится известным местонахождение целевой ячейки. 2. Вычислить правостороннее значение (rvalue). Справа может находиться сколь угодно сложное выражения, которое может включать и операции присваивания. 3. Поместить rvalue по адресу, указанному в lvalue, при необходимости выполнить приведение типов. 4. Возвратить rvalue как результат выполнения операции.

Базовая операция '=' © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 8... int x; x = 5;... int x; x = 5; x 5 5 const! I ? ? x II C (assign.c)... movl $5,-0x4(%ebp)... movl $5,-0x4(%ebp)... AT&T assembly syntax gcc –S assign.c

Базовая операция '=' © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 9... int x; x = 5;... int x; x = 5; x 5 5 const! I ? ? x II CAT&T assembly syntax... movl $5,-0x4(%ebp)... movl $5,-0x4(%ebp)... Регистр EBP – начало стекового кадра Регистр EBP – начало стекового кадра

Базовая операция '=' © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» x 5 5 eax 5 5 y 5 5 IIIIII ? ? y... int x = 5, y; y = x;... int x = 5, y; y = x;... CAT&T assembly syntax... movl $5, -4(%ebp) movl -4(%ebp), %eax movl %eax, -8(%ebp)... movl $5, -4(%ebp) movl -4(%ebp), %eax movl %eax, -8(%ebp)...

Базовая операция '=' © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» x 5 5 eax 15 eax 15 z eax IIIIIIVI ? ? z... int x = 5, z; z = x + 10;... int x = 5, z; z = x + 10;... CAT&T assembly syntax 5 5 const! +... movl $5, -4(%ebp) movl -4(%ebp), %eax addl $10, %eax movl %eax, -8(%ebp)... movl $5, -4(%ebp) movl -4(%ebp), %eax addl $10, %eax movl %eax, -8(%ebp)...

Базовая операция '=' © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» y 5 5 eax 4 4 edx a 10 eax I 4 4 z 9 9 II... int z = 4, y = 5, a; a = z + y + 1;... int z = 4, y = 5, a; a = z + y + 1;... CAT&T assembly syntax movl $4, -4(%ebp) movl $5, -8(%ebp) movl -8(%ebp), %eax movl -4(%ebp), %edx leal (%edx,%eax), %eax addl $1, %eax movl %eax, -12(%ebp) movl $4, -4(%ebp) movl $5, -8(%ebp) movl -8(%ebp), %eax movl -4(%ebp), %edx leal (%edx,%eax), %eax addl $1, %eax movl %eax, -12(%ebp) 5 5 eax 4 4 edx eax III 1 1 const! + V

Преобразование типов данных © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 13 Типы данных имеют различное представление в памяти При присваивании происходит преобразование типа данных rvalue к типу данных lvalue. rvalue целыйвеществ. lvalue целый 1)диапазон rv = lv - простое копирование: 1010 = )диапазон rv < lv - добавление незначащих нулей: )диапазон rv > lv - отбрасывание старших разрядов: )отбрасывание дробной части: )если целая часть не помещается в диапазон lvalue, то результат не определен: float f = 1E20; веществ. Возможно отбрасывание младших разрядов, не попадающих в мантиссу: i = , f = i = , f = i = , f = )диапазон rv = lv - простое копирование. 2)диапазон rv < lv - добавление незначащих нулей: )диапазон rv > lv возможно переполнение: +/-inf или обнуление.

Операции присваивания © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 14 Класс Опер.ОписаниеПример Унарная ++ префиксный инкремент ++i; постфиксный инкремент i++; -- префиксный декремент --i; префиксный декремент i--; i++i = i ii = i + 1 k = i++ * 2;k = i * 2; i = i + 1 k = ++i * 2;i = i + 1; k = i * 2 k = i-----j // i jj = j – 1; k = i – j; i = i - 1

Префиксный и постфиксный инкремент © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 15 int i = 10; i++; int i = 10; i++; CAT&T asm (gcc –S prog.c) movl $10, -4(%ebp) addl $1, -4(%ebp) movl $0, %eax movl $10, -4(%ebp) addl $1, -4(%ebp) movl $0, %eax int i = 10, k; k = i++ * 2; int i = 10, k; k = i++ * 2; movl $10, -4(%ebp) movl -4(%ebp), %eax addl %eax, %eax movl %eax, -8(%ebp) addl $1, -4(%ebp) movl $10, -4(%ebp) movl -4(%ebp), %eax addl %eax, %eax movl %eax, -8(%ebp) addl $1, -4(%ebp) int i = 10, k; k = ++i * 2; int i = 10, k; k = ++i * 2; movl $10, -4(%ebp) addl $1, -4(%ebp) movl -4(%ebp), %eax addl %eax, %eax movl %eax, -8(%ebp) movl $10, -4(%ebp) addl $1, -4(%ebp) movl -4(%ebp), %eax addl %eax, %eax movl %eax, -8(%ebp)

Операции присваивания © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 16 Класс Опер.ОписаниеПример Бинарная += присваивание вида: a = b; трактуется как a = a b; например: a += b; эквив. a = a + b; i += j; -=i -= j; *=i *= j; /=i /= j; %=i %= j;... j += 15j = j + 15 k /= x + y;k /= k / (x + y); k *= k;

Примеры операций присваивания © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 17 CAT&T asm (gcc –S prog.c) #include int main() { int k, y = 5, x = 6; k += x + y; } #include int main() { int k, y = 5, x = 6; k += x + y; } movl $5, -8(%ebp) movl $6, -12(%ebp) movl -8(%ebp), %eax movl -12(%ebp), %edx leal (%edx,%eax), %eax addl %eax, -4(%ebp) movl $5, -8(%ebp) movl $6, -12(%ebp) movl -8(%ebp), %eax movl -12(%ebp), %edx leal (%edx,%eax), %eax addl %eax, -4(%ebp) #include int main() { int k = 40; k *= k; } #include int main() { int k = 40; k *= k; } movl $40, -4(%ebp) movl -4(%ebp), %eax imull -4(%ebp), %eax movl %eax, -4(%ebp) movl $40, -4(%ebp) movl -4(%ebp), %eax imull -4(%ebp), %eax movl %eax, -4(%ebp)

Логический тип данного © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 18 Логический *, булев (англ. Boolean или logical data type) тип данных – базовый тип данных в информатике, допускающий два возможных значения, иногда называемых правдой (true) и ложью (false). Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через целочисленный тип. В подавляющем большинстве языков за истину полагается единица, за ложь ноль. Pascal Boolean Pascal Boolean C++ bool C++ bool Ada Boolean Ada Boolean C99 bool C99 bool C89 int/short/char C89 int/short/char ЛОЖЬ ~ 0 ИСТИНА ~ не 0 *

Операции сравнения © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 19 Класс Опер.ОписаниеПример Бинарная < Меньше a < b > Больше a > b >= Больше или равно a >= b

Пример использования операций сравнения © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 20 C (prog.c)AT&T asm (gcc –S prog.c) #include int main() { int x = 10, k = 5; int j, m; j = x < k; m = x > k; } #include int main() { int x = 10, k = 5; int j, m; j = x < k; m = x > k; } movl $10, -4(%ebp) movl $5, -8(%ebp) movl -4(%ebp), %eax cmpl -8(%ebp), %eax // сравнить setl %al // al – один байт, треб. setl movzbl %al, %eax // преобразование movl %eax, -12(%ebp) movl -4(%ebp), %eax cmpl -8(%ebp), %eax setg %al movzbl %al, %eax movl %eax, -16(%ebp) movl $10, -4(%ebp) movl $5, -8(%ebp) movl -4(%ebp), %eax cmpl -8(%ebp), %eax // сравнить setl %al // al – один байт, треб. setl movzbl %al, %eax // преобразование movl %eax, -12(%ebp) movl -4(%ebp), %eax cmpl -8(%ebp), %eax setg %al movzbl %al, %eax movl %eax, -16(%ebp)

Типичные ошибки © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 21 #include int main() { int x = 10, y = 5, z = 7; int r; r = x < y < z; // = 1, а не 0 } #include int main() { int x = 10, y = 5, z = 7; int r; r = x < y < z; // = 1, а не 0 } Операции сравнения имеют ассоциативность "слева-направо". Это означает, что среди равных по приоритету операций сначала выполняется самая левая, потом вторая слева и т.д. Последней выполняется правая операция. x < y < z = (x < y) < z 1. x < y = 10 < 5 = 0 2. (x < y) < z = (10 < 5) < 7 = 0 < 7 = 1

Булева алгебра © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 22 * Булевой алгеброй называется непустое множество A с двумя бинарными операциями (конъюнкция и дизъюнкция), одной унарной операцией (отрицание) и двумя выделенными элементами: 0 (или Ложь) и 1 (или Истина) такими, что для всех a, b и c из множества A верны следующие аксиомы: ассоциативность коммутативность поглощение дистрибутивность комплементарность

Булева алгебра (аксиомы и свойства) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 23 * ассоциативность коммутативность поглощение дистрибутивность комплементарность законы де Моргана Блейка-Порецкого идемпотентность двойное отрицание склеивание

Логические операции © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 24 Опер.Описание ! Логическое НЕ (отрицание) && Логическое И (конъюнкция) || Логическое ИЛИ (дизъюнкция) ab!aa && ba || b

Логическое НЕ (отрицание) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 25 Опер.Описание ! Логическое НЕ && Логическое И || Логическое ИЛИ ab!a Операция отрицания используется для замены значения логического выражения на противоположное. Например: int x = 10, y, k; scanf("%d",&y); k = !(x = = y); // выколотая точка x

Логическое И (коньюнкция) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 26 Опер.Описание ! Логическое НЕ && Логическое И || Логическое ИЛИ Логическая операция, по своему применению максимально приближенная к союзу «и». Результат будет истинным, если оба аргумента истинны. Например: int y, k; scanf("%d",&y); k = (0 < y) && (y < 10); // интервал 0 < y < 10 aba && b

Логическое И (аналогия с электрической схемой) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 27

Логическое ИЛИ (дизъюнкция) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 28 Опер.Описание ! Логическое НЕ && Логическое И || Логическое ИЛИ Логическая операция, по своему применению максимально приближенная к союзу «и». Результат будет истинным, если оба аргумента истинны. Например: int y, k; scanf("%d",&y); k = (0 >= y) || (y >= 10); // (-; 0] + [10;+) 010 aba || b

Логическое ИЛИ (аналогия с электрической схемой) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 29