Содержание
- 2. Краткое содержание предыдущей серии Как в ассемблере происходит сравнение? Как используется результат сравнения? Что такое «условное
- 3. Краткое содержание этой серии О магии Операции в языке С (продолжение) О-нотация
- 4. Что такое «магия»? В широком смысле – это «что-то непонятное». Строгой классификации не существует. Условно: белая
- 5. Пример «белой магии» Функция sin. Что возвращает sin? Синус угла. А как она его вычисляет? Правильно.
- 6. Пример «черной магии» Очень сложно понять, что делает эта программа и как она это делает.
- 7. Причины «магии» «Индуизм» Ручная оптимизация Магические числа Обфускация (намеренное ухудшение читаемости кода) Недокументированные и малоизвестные особенности
- 8. «Индуизм» («индусский код») Не индуизм: if( i > 0 && i Индуизм: if( i.toString().length() == 2
- 9. «Магические числа» Это численные константы, смысл которых не ясен. #define SPEED_MAX 59 void setSpeed(int speed) {
- 10. Как сделать черную магию белой? // Быстрый вариант функции 1/sqrt. // Быстр при аппаратной поддержке плавающей
- 11. Что такое интерфейс? Интерфейс – набор входов и выходов черного ящика; их свойства, возможные диапазоны и
- 12. Интерфейсы double sin( double angleInRadians ); int work( int a, int b, int * с );
- 13. Хороший интерфейс делает черную магию белой!
- 14. Операции в языке С (продолжение) Логические Битовые
- 15. Логические операции ! – логическое отрицание && - логическое И || - логическое ИЛИ Т.к. тип
- 16. Логическое отрицание - ! Результат выражения !A равен нулю, если А не равно нулю и равен
- 17. Логическое ИЛИ - || Результат выражения А || B равен нулю, только если оба аргумента равны
- 18. Логическое И - && Результат выражения А && B равен единице, только если оба аргумента не
- 19. Логические операции в ассемблере Их нет! Есть только битовые. Все операции, которые называются «logical» в тех.
- 20. Битовые операции языка С ~ - битовая инверсия | - битовое ИЛИ & - битовое И
- 21. Битовая инверсия - ~ При битовой инверсии каждый бит двоичного представления аргумента меняется на противоположный (инвертируется).
- 22. Битовое ИЛИ - | Результатом битового ИЛИ будет число, каждый бит которого является результатом булевой операции
- 23. Битовое И - & Результатом битового И будет число, каждый бит которого является результатом булевой операции
- 24. Битовое исключающее ИЛИ (XOR) - ^ Если значение одного бита у аргументов разное – то результат
- 26. Сдвиги Сдвиги бывают: «просто» сдвиги – они же «логические» (без учета знака) арифметические (с учетом знака)
- 27. Сдвиг влево -
- 28. Сдвиг вправо - >>
- 29. Примеры сюрпризов int a = -1 int a = 1 int a = 1 int a
- 30. Сюрприз в сюрпризе Описания сдвигов отрицательных чисел появились в стандарте слишком поздно. Программисты успели написать достаточно
- 31. Рассмотрим два алгоритма сортировки Сортировка пузырьком Сортировка выбором
- 32. Какой из них быстрее? А если взять другой массив? А если взять другой компьютер? А если
- 33. Как узнать, какой алгоритм быстрее? Написать программу и запустить? но ее можно написать с ошибками на
- 34. Теоретический анализ? Какая самая долгая операция в алгоритме? Какая операция выполняется наибольшее количество раз? От чего
- 35. Теоретический анализ?
- 36. Теоретический анализ?
- 37. Теоретический анализ? Абстрагироваться от «железа» Абстрагироваться от входных данных Получается т.н. «О-нотация» (Big-Oh notation): Время работы
- 39. Скачать презентацию