Разделы презентаций


Есть ли у вас вопросы?

Содержание

Краткое содержание предыдущей серииКак в ассемблере происходит сравнение?Как используется результат сравнения?Что такое «условное исполнение»?Как в ассемблере осуществляется ветвление?

Слайды и текст этой презентации

Слайд 1Есть ли у вас вопросы?

Есть ли у вас вопросы?

Слайд 2Краткое содержание предыдущей серии
Как в ассемблере происходит сравнение?

Как используется результат

сравнения?

Что такое «условное исполнение»?

Как в ассемблере осуществляется ветвление?

Краткое содержание предыдущей серииКак в ассемблере происходит сравнение?Как используется результат сравнения?Что такое «условное исполнение»?Как в ассемблере осуществляется

Слайд 3Краткое содержание этой серии
О магии

Операции в языке С (продолжение)

О-нотация





Краткое содержание этой серииО магииОперации в языке С (продолжение)О-нотация

Слайд 4Что такое «магия»?
В широком смысле – это «что-то непонятное».

Строгой

классификации не существует.
Условно:

белая магия – результат действия полностью понятен, но

не понятен механизм

черная магия – результат действия понятен не полностью или вообще ничего непонятно
Что такое «магия»?В широком смысле – это «что-то непонятное». Строгой классификации не существует.Условно:белая магия – результат действия

Слайд 5Пример «белой магии»
Функция sin. Что возвращает sin?
Синус угла.
А как

она его вычисляет?
Правильно.



Если вас устраивает результат «белой магии» (точность,

скорость и т.д.), то понимать ее механизм не обязательно.
Пример «белой магии»Функция sin. Что возвращает sin? Синус угла.А как она его вычисляет? Правильно.Если вас устраивает результат

Слайд 6Пример «черной магии»
Очень сложно понять, что делает эта программа и

как она это делает.

Пример «черной магии»Очень сложно понять, что делает эта программа и как она это делает.

Слайд 7Причины «магии»
«Индуизм»

Ручная оптимизация

Магические числа

Обфускация (намеренное ухудшение читаемости кода)

Недокументированные и малоизвестные

особенности чего-либо

Соревнования волшебников

Причины «магии»«Индуизм»Ручная оптимизацияМагические числаОбфускация (намеренное ухудшение читаемости кода)Недокументированные и малоизвестные особенности чего-либоСоревнования волшебников

Слайд 8«Индуизм» («индусский код»)
Не индуизм:

if( i > 0 && i

100 )


Индуизм:

if( i.toString().length() == 2 )



Стремление писать код кривым, неочевидным,


неестественным способом (жаргонное обозначение).
«Индуизм» («индусский код»)Не индуизм:if( i > 0 && i < 100 )Индуизм:if( i.toString().length() == 2 )Стремление писать

Слайд 9«Магические числа»
Это численные константы, смысл которых не ясен.

#define SPEED_MAX 59


void

setSpeed(int speed)
{
if(speed > SPEED_MAX)
return;
...
}
void setSpeed(int speed)
{

if(speed > 59)
return;
...
}
«Магические числа»Это численные константы, смысл которых не ясен.#define SPEED_MAX 59void setSpeed(int speed){ if(speed > SPEED_MAX)  return;

Слайд 10Как сделать черную магию белой?
// Быстрый вариант функции 1/sqrt.
//

Быстр при аппаратной поддержке плавающей арифметики

float fastInverseSqrt( float number )
{
long

i;
float x2, y;
const float threehalfs = 1.5F;

x2 = number * 0.5F;
y = number;
i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 );
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) );

return y;
}
Как сделать черную магию белой?// Быстрый вариант функции 1/sqrt. // Быстр при аппаратной поддержке плавающей арифметикиfloat fastInverseSqrt(

Слайд 11Что такое интерфейс?

Интерфейс – набор входов и выходов черного ящика;

их свойства, возможные диапазоны и т.д.

В зависимости от области интерфейс

может быть разным.



Что такое интерфейс?Интерфейс – набор входов и выходов черного ящика; их свойства, возможные диапазоны и т.д.В зависимости

Слайд 12Интерфейсы
double sin( double angleInRadians );
int work( int a, int b,

int * с );
// зависит от трех глобальных переменных
//

возвращает значение -1, если нет ошибок
// переменная с не нужна уже второй год,
// но ее забывают убрать

Хороший интерфейс:

Плохой интерфейс:

Интерфейсыdouble sin( double angleInRadians );int work( int a, int b, int * с ); // зависит от

Слайд 13Хороший интерфейс делает черную магию белой!

Хороший интерфейс делает черную магию белой!

Слайд 14Операции в языке С (продолжение)
Логические

Битовые

Операции в языке С (продолжение)ЛогическиеБитовые

Слайд 15Логические операции
! – логическое отрицание
&& - логическое И
|| - логическое

ИЛИ

Т.к. тип bool был введен только в С99, все логические

операции используют тип int.

Поэтому для них 0 – это ложь, а любое другое число – истина.
Логические операции! – логическое отрицание&& - логическое И|| - логическое ИЛИТ.к. тип bool был введен только в

Слайд 16Логическое отрицание - !
Результат выражения !A равен нулю, если А

не равно нулю
и равен единице, если А равно нулю.



Выражение !A эквивалентно выражению 0==A.

Логическое отрицание - !Результат выражения !A равен нулю, если А не равно нулю и равен единице, если

Слайд 17Логическое ИЛИ - ||
Результат выражения А || B равен нулю,

только если оба аргумента равны нулю, во всех остальных случаях

результат равен единице.
Логическое ИЛИ - ||Результат выражения А || B равен нулю, только если оба аргумента равны нулю, во

Слайд 18Логическое И - &&
Результат выражения А && B равен единице,

только если оба аргумента не равны нулю, во всех остальных

случаях результат равен нулю.

Логическое И - &&Результат выражения А && B равен единице, только если оба аргумента не равны нулю,

Слайд 19Логические операции в ассемблере
Их нет! Есть только битовые.

Все операции, которые

называются «logical» в тех. описании, являются битовыми.

Логические операции языка С

превращаются в несколько ассемблерных команд.
Логические операции в ассемблереИх нет! Есть только битовые.Все операции, которые называются «logical» в тех. описании, являются битовыми.Логические

Слайд 20Битовые операции языка С
~ - битовая инверсия
| - битовое ИЛИ
&

- битовое И
^ - битовое исключающее или (XOR)
>> - сдвиг

вправо
<< - сдвиг влево

Все битовые операции выполняются над двоичными представлениями чисел.
В языке С битовые операции определены только для целых чисел!
Битовые операции языка С~ - битовая инверсия| - битовое ИЛИ& - битовое И^ - битовое исключающее или

Слайд 21Битовая инверсия - ~
При битовой инверсии каждый бит двоичного представления

аргумента меняется на противоположный (инвертируется).
Размер (в байтах) результата операции

равен размеру аргумента, поэтому результат зависит от типа!

Примеры:

uint8_t A = 5; // A = 0000 01012 = 510
A = ~A; // A = 1111 10102 = 25010

uint16_t B = 5; // B = 0000 0000 0000 01012 = 510
B = ~B; // B = 1111 1111 1111 10102 = 6553010
Битовая инверсия - ~При битовой инверсии каждый бит двоичного представления аргумента меняется на противоположный (инвертируется). Размер (в

Слайд 22Битовое ИЛИ - |
Результатом битового ИЛИ будет число, каждый бит

которого является результатом булевой операции ИЛИ между соответствующими битами аргументов.



Коротко: если бит равен 1 в любом из аргументов – он равен 1 в результате.




A |= B эквивалентно A = A | B.
Битовое ИЛИ удобно использовать для установки отдельных битов в единицу: a |= 1;
Битовое ИЛИ - |Результатом битового ИЛИ будет число, каждый бит которого является результатом булевой операции ИЛИ между

Слайд 23Битовое И - &
Результатом битового И будет число, каждый бит

которого является результатом булевой операции И между соответствующими битами аргументов.



Коротко: если бит равен 0 в любом из аргументов – он равен 0 в результате.




A &= B эквивалентно A = A & B.
Битовое И удобно использовать для обнуления отдельных битов:
a &= ~1;
Битовое И - &Результатом битового И будет число, каждый бит которого является результатом булевой операции И между

Слайд 24Битовое исключающее ИЛИ (XOR) - ^
Если значение одного бита у

аргументов разное – то результат равен 1.





A ^= B эквивалентно

A = A ^ B.
Битовое исключающее ИЛИ удобно использовать для инверсии отдельных битов:
a ^= 1;
Битовое исключающее ИЛИ (XOR) - ^Если значение одного бита у аргументов разное – то результат равен 1.A

Слайд 26Сдвиги
Сдвиги бывают:

«просто» сдвиги – они же «логические» (без учета знака)

арифметические

(с учетом знака)

циклические

Какие же сдвиги в языке С?
Не циклические.

СдвигиСдвиги бывают:«просто» сдвиги – они же «логические» (без учета знака)арифметические (с учетом знака)циклическиеКакие же сдвиги в языке

Слайд 27Сдвиг влево -

Сдвиг влево -

Слайд 28Сдвиг вправо - >>

Сдвиг вправо - >>

Слайд 29Примеры сюрпризов
int a = -1

behaviour

int a = 1

a = 1 << -2; - undefined behaviour

int a = 1 >> -3; - undefined behaviour

int a = -1 >> 4; - implementation defined
Примеры сюрпризовint a = -1 > 4;  - implementation defined

Слайд 30Сюрприз в сюрпризе
Описания сдвигов отрицательных чисел появились в стандарте слишком

поздно.
Программисты успели написать достаточно кода, где такие сдвиги используются!

Зачем?

Для получения

битовых масок с заданным числом нулей удобно сдвигать -1 (если он в доп. коде)

Но так делать не надо! Сдвигайте лучше ~0u
Сюрприз в сюрпризеОписания сдвигов отрицательных чисел появились в стандарте слишком поздно.Программисты успели написать достаточно кода, где такие

Слайд 31Рассмотрим два алгоритма сортировки
Сортировка пузырьком
Сортировка выбором

Рассмотрим два алгоритма сортировкиСортировка пузырькомСортировка выбором

Слайд 32Какой из них быстрее?
А если взять другой массив?

А если взять

другой компьютер?

А если массив будет гораздо, гораздо больше?

Какой из них быстрее?А если взять другой массив?А если взять другой компьютер?А если массив будет гораздо, гораздо

Слайд 33Как узнать, какой алгоритм быстрее?
Написать программу и запустить?
но ее можно

написать с ошибками
на разных компьютерах скорость будет разной
на разных исходных

данных скорость будет разной
на разных запусках скорость может быть разной!
Как узнать, какой алгоритм быстрее?Написать программу и запустить?но ее можно написать с ошибкамина разных компьютерах скорость будет

Слайд 34Теоретический анализ?
Какая самая долгая операция в алгоритме?

Какая операция выполняется наибольшее

количество раз?

От чего зависит это количество?

Теоретический анализ?Какая самая долгая операция в алгоритме?Какая операция выполняется наибольшее количество раз?От чего зависит это количество?

Слайд 35Теоретический анализ?

Теоретический анализ?

Слайд 36Теоретический анализ?

Теоретический анализ?

Слайд 37Теоретический анализ?
Абстрагироваться от «железа»
Абстрагироваться от входных данных

Получается т.н. «О-нотация» (Big-Oh

notation):
Время работы алгоритма выражается как функция от размера входных данных

N

Игнорируются константные коэффициенты

Остается только старший порядок

Очень грубое объяснение! Подробнее см. «алгоритмическая сложность», «теория алгоритмов»
Теоретический анализ?Абстрагироваться от «железа»Абстрагироваться от входных данныхПолучается т.н. «О-нотация» (Big-Oh notation):Время работы алгоритма выражается как функция от

Слайд 38А можно сортировать быстрее?

А можно сортировать быстрее?

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика