Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен по информатике.docx
Скачиваний:
25
Добавлен:
22.09.2019
Размер:
1.18 Mб
Скачать

Битовые сдвиги

Основная статья: Битовый сдвиг

К битовым операциям также относят битовые сдвиги. При сдвиге значения битов копируются в соседние по направлению сдвига. Различают несколько видов сдвигов — логический, арифметический и циклический, в зависимости от обработки крайних битов.

Также различают сдвиг влево (в направлении от младшего бита к старшему) и вправо (в направлении от старшего бита к младшему).

Логический сдвиг

Арифметический сдвиг (правый)

Циклический сдвиг

Циклический сдвиг через перенос

Логический сдвиг

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

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

Арифметический сдвиг

Арифметический сдвиг аналогичен логическому, но значение слова считается знаковым числом, представленным в дополнительном коде. Так, при правом сдвиге старший бит сохраняет свое значение. Левый арифметический сдвиг идентичен логическому.

Циклический сдвиг

При циклическом сдвиге, значение последнего бита по направлению сдвига копируется в первый бит (и копируется в бит переноса).

Также различают циклический сдвиг через бит переноса — при нём первый бит по направлению сдвига получает значение из бита переноса, а значение последнего бита сдвигается в бит переноса.

  1. Структурное программирование: историческая справка.

На протяжении 60-х годов попытки создания многих больших программных систем наталкивались на ряд трудностей. Сроки создания программного обеспечения обычно не выполнялись, стоимость проектов превосходила бюджет, а конечный продукт не отличался надёжностью. Люди начали понимать, что создание программного обеспечения – гораздо более сложная задача, чем они себе представляли.

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

В 60-е годы стало ясно, что неограниченное использование передач управления является источником множества неприятностей при групповой разработке программного обеспечения. Вина была возложена на оператор goto, который позволяет передавать управление в очень широких пределах.

Например, для реализации следующего алгоритма:

использовался код:

S = 0;

i = 1;

начало_цикла:

S = S + i;

i = i + 1;

Если (i<10), то

перейти на «начало_цикла»;

Если (S<100), то

перейти на «действие2»;

Вывод “Сумма больше ста”;

перейти на «конец_условия»;

действие2:

Вывод “Сумма меньше ста”;

конец_условия:

Такой код был нормой для программ того времени. Неправильное и необдуманное использование произвольных переходов в тексте программы приводит к получению запутанных, плохо структурированных программ (т.н. программ-спагетти), по тексту которых практически невозможно понять порядок исполнения и взаимозависимость фрагментов.

Идеи так называемого структурного программирования стали почти синонимами требования «не применять goto». Исследование Бома и Джакопини показало, что программы могут быть написаны без использования оператора goto. В результате для программистов настала эра перехода к стилю программирования «с минимальным использованием goto».

Такого не было до 70-х годов, пока программисты не стали серьёзно применять структурное программирование. Результаты получились впечатляющие: группы разработчиков программного обеспечения сообщали, что время разработок сократилось, производительность труда выросла, и проекты стали чаще укладываться в рамки бюджета. Ключом к успеху явилось, что структурированные программы стали более прозрачными, легче поддавались отладке и модификации и, что самое главное, в них стало меньше ошибок.

Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков.