Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Побітові логічні операції



Ряд джерел за мовами низького рівня називає побітові логічні операції просто логічними, але в термінології програмування на мовах високого рівня в назвах бітових операцій присутні прикметники бітовий, побітовий (наприклад: «побітове логічне І», воно ж «побітове множення»), порозрядний. У деяких мовах програмування назви операторів, відповідних логічним та побітовим логічним операціям, схожі. Крім того, мова програмування може допускати неявне приведення числового типу до логічного та навпаки. У таких мовах програмування необхідно уважно стежити за використанням логічних та побітових операцій, перемішування яких може призвести до помилок. Наприклад, в C++ результатом виразу «2 && 1» (логічне І) є булеве значення true, а результатом виразу «2 & 1» (побітове І) — ціле 0.

Побітове заперечення (абопобітове НЕ, або доповнення) — це унарна операція, дія якої еквівалентна застосуваннюлогічного заперечення до кожного біту двійкового подання операнда. Іншими словами, на тій позиції, де в двійковому поданні операнда був 0, внаслідок буде 1, і, навпаки, де була 1, там буде 0.
Приклад:

НЕ 01

 

  10

Побітове І — це бінарна операція, дія якої еквівалентно застосування логічного І до кожної пари бітів, які стоять на однакових позиціях у двійкових уявленнях операндів. Іншими словами, якщо обидва відповідних біта операндів рівні 1, результуючий двійковий розряд дорівнює 1, якщо ж хоча б один біт з пари дорівнює 0, результуючий двійковий розряд дорівнює 0.
Приклад:

І

0011
0101

 

  0001

Побітове АБО — це бінарна операція, дія якої еквівалентно застосування логічного АБО до кожної пари бітів, які стоять на однакових позиціях у двійкових уявленнях операндів. Іншими словами, якщо обидва відповідних біта операндів рівні 0, двійковий розряд результату дорівнює 0, якщо ж хоча б один біт з пари дорівнює 1, двійковий розряд результату дорівнює 1.
Приклад:

АБО

0011
0101

 

  0111

Додавання за модулем два (абодвомісна операція виключне АБО) — це бінарна операція, результат дії якої дорівнює 1, якщо число складаємих одиничних бітів непарне, якщо ж їх число парне, то результат дорівнює 0.
Приклад:

Викл. АБО

0011
0101

 

  0110

Перша російське назва операції обумовлена тим, що результат цієї операції відрізняється від результату «АБО» лише в одному з 4 випадків входу — обох 1 (випадок одночасної істинності аргументів «виключається»). Ще в російській граматиці значення цієї логічної зв'язки передається союзом «або».

Друга назва — тим, що дійсно є складанням в кільці вирахувань за модулем два, з чого слідують деякі цікаві властивості. Наприклад, на відміну від вищеописаних «І» та «АБО», ця операція є оборотною, або інволютивною: . Вкомп'ютерній графіці «додавання по модулю два» застосовується при виведенні спрайтів на картинку — повторне її застосування прибирає спрайт з картинки. Завдяки інволютивності ця ж операція знайшла застосування в криптографії як найпростіша реалізація ідеального шифру (шифру Вернама). «Додавання за модулем два» також може використовуватися для обміну двох змінних, використовуючи алгоритм обміну за допомогою виключає АБО.

Також ця операція може називатися «інверсією по масці», тобто у вихідного двійкового числа інвертуються біти, які збігаються з 1 в масці.

У поширених мовах програмування вбудованими засобами реалізуються лише чотири побітові логічні операції: І, АБО, НЕ і виключне АБО. Для завдання довільної побітовій логічної операції цілком достатньо перерахованих, і, більше того, як випливає з теорії булевих функцій, можна обмежитися ще меншим набором базових операцій. Є також мови програмування, де існує вбудована можливість виконати будь-яку бінарну логічну операцію побітово. Наприклад, в PL/I є вбудована функція BOOL, третій аргумент якої призначено для вказівки довільної логічної операції, яку необхідно побітово застосувати до перших двох аргументів.





Бітові зсуви

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

Також розрізняють зсув вліво (в напрямку від молодшого біта до старшого) і вправо (в напрямку від старшого біта до молодшого).

Логічний зсув

Арифметичний зсув (правий)

Циклічний зсув

Циклічний зсув через перенесення

Логічний зсув

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

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

Арифметичний зсув

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

Циклічний зсув

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

Також розрізняють циклічний зсув через біт перенесення — при ньому перший біт за напрямом зсуву отримує значення з біта переносу, а значення останнього біта зсувається в біт переносу.

У мовах програмування

У наступній таблиці для деяких мов програмування наведено вбудовані оператори та функції, що реалізують побітові логічні операції.

Мова НЕ І АБО Викл. АБО Зсув вліво Зсув вправо Інші
C/С++, Java, C#, Ruby ~ & | ^ << >>  
Pascal not and or xor shl shr  

PL/I

INOT IAND IOR IEOR    

BOOL

  & |      
Prolog \ /\ \/        

Бітові операції як основа цифрової техніки[ред. • ред. код]

Бітові операції лежать в основі обробки цифрових сигналів. А саме, за допомогою них ми можемо з одного або декількох сигналів на вході отримати новий сигнал, який у свою чергу може бути поданий на вхід однієї або декільком такими операціями. Власне, саме бітові операції в поєднанні з запам'ятовувальними елементами (напр. тригерами) реалізують все багатство можливостей сучасної цифрової техніки.

З точки зору застосування окрема бітова операція мало цікава. Тому практичне застосування ґрунтується на способах комбінування різних бітових операцій, для реалізації більш складного обчислення. Можна відзначити два аспекти:

1. збільшення розміру регістрів, в яких бітові операції виконуються не по одній, а одразу на безлічі 8, 16, 32, 64 бітах

2. експериментальні пристрої, де узагальнюють бітові операції з двійкової системи, на трійчастий та інші системи числення (так наприклад, розроблена теорія роботи з четверичною системою (ДНК-комп'ютер), Так само робляться дослідження в області квантового комп'ютера).

Реалізація бітових операцій може в принципі бути будь-який: механічної (в тому числі гідравлічної та пневматичної), хімічною, тепловою, електричної, магнітної та електромагнітної (діапазони — ІК, видимий оптичний, УФ і далі за зменшенням довжин хвиль), а також у вигляді комбінацій, наприклад, електромеханічної.

У першій половині XX століття до винаходу транзисторів застосовували електромеханічні реле та електронні лампи.

У пожежонебезпечних та вибухонебезпечних умовах досі застосовують пневматичні логічні пристрої (пневмоніка).

Найбільш поширені електронні реалізації бітових операцій за допомогою транзисторів, наприклад Резисторно-транзисторна логіка(РТЛ), діод-транзисторна логіка (ДТЛ), емітерний-пов'язана логіка (ЕСЛ), транзисторних-транзисторна логіка (ТТЛ), N-МОП логіка,КМОП логіка і ін

Однією з причин, через яку базові (основні) логічні елементи будують на інвертора, а повторювачі є додатковими елементами, було те, що в електроніці інвертори (ОЕ) могутніше повторювачів (ОК). Але основною причиною є те, що два інвертора замінюють один повторювач, а на повторювачах інвертор не збудувати.

В квантових обчисленнях з перерахованих булевих операцій реалізуються лише НЕ і викл. АБО (з деякими застереженнями). Квантових аналогів І, АБО, тощо. не існує.

Завдяки реалізації в арифметичному логічному пристрої (АЛУ) процесора чималі їх реєстрові бітові операції апаратно доступні вмовах низького рівня. У більшості процесорів реалізовані в якості інструкції регістровий НЕ; реєстрові двухаргументние І, АБО, викл. АБО; перевірка рівності нулю (див. вище); три типи бітових зрушень, а також циклічні бітові зрушення.

Регістрова операція І використовується для:

· перевірки біта на 0 або 1

· установки 0 у вказаний біт (скидання біта)

Регістрова операція АБО використовується:

· установки 1 у вказаний біт

Регістрова операція виключає АБО використовується для інвертування бітів регістра по масці Зрушення вліво/вправо використовується для множення/цілочисельного ділення на 2 і виділення окремих бітів.

Так, наприклад, в мережевих інтернет-технологіях операція І між значенням IP-адреси та значенням маски підмережі використовується для визначення належності цієї адреси до підмережі.

Студент повинен

знати :

v Означення, будову та призначення арифметико-логічного пристрою.

v Класифікацію АЛП.

v Види АЛП за структурою.

v Види АЛП за типом запису даних.

v Види АЛП за архітектурними особливостями.

v Види АЛП за формою подання даних.

v Види АЛП залежно від часу виконання.

v Види АЛП залежно від реалізації мікроалгоритму.

v Означення бітової операції.

v Види побітових логічних операцій.

вміти :

v Розрізняти АЛП.

v Виконувати побітові логічні операції.

Питання для самоконтролю

1. Дайте означення арифметико-логічного пристрою.

2. Охарактеризуйте бутову та призначення арифметико-логічного пристрою.

3. Назвіть класифікацію АЛП.

4. Перелічіть види АЛП за структурою.

5. Перелічіть види АЛП за типом запису даних.

6. Перелічіть види АЛП за архітектурними особливостями.

7. Перелічіть види АЛП за формою подання даних.

8. Перелічіть види АЛП залежно від часу виконання.

9. Перелічіть види АЛП залежно від реалізації мікроалгоритму.

10. Дайтеозначення бітової операції.

11. Назвіть види побітових логічних операцій.

 Література

[10] c. 204-210, [11] c. 235-243.

 


1.6. Особливості роботи у середовищі програмування С++


Питання для опрацювання

1. Загальні відомості про середовище програмування C++.

2. Порядок створення програм та за- пуску їх на виконання у Visual С++.

3. Особливості від лагодження програм за допомогою засобів середовища Visual С++.

Методичні рекомендації

Під час вивчення даної теми студенти мають ознайомитись із інтерфейсом середовища розробки Visual С++ , навчитись використовувати його можливості під час створення програм

1. Загальні відомості про середовище програмування С++

Оскільки мова С++ є достатньо популярною мовою програмування, тому для неї створено багато середовищ програмування (або компіляторів) з різним інтерфейсом. Як правило, ці компілятори розроблені фірмою Borland або Microsoft. Найпростіші компілятори працюють під керуванням ОС MS DOS і їх інтерфейс повністю ідентичний до інтерфейсу середовища програмування Turbo Pascal. Але найпопулярнішим пакетом програм для розробника програмного забезпечення у світі є пакет Microsoft Visual Studio, у склад якого входить компілятор Microsoft Visual C ++, який працює під керуванням ОС Windows та має достатньо зручний інтерфейс:

Як видно з малюнку, вікно середовища складається з трьох частин:

1. Вікно проекту ( Workspace ), у якому відображаються усі файли, що входять у проект користувача, а також власні функції користувача (очевидно, що великі програмні проекти можуть складатись із кількох файлів, а тим більше функцій користувача)

2. Робоча область, куди користувач вводить текст програми.

3. Вікно виводу ( Output ), за допомогою якого компілятор видає повідомлення про успішну компіляцію програми або про помилки під час компіляції. Таке вікно ще називають консоль.

Очевидно, що обов’язковим вікном є робоча область, а усі інші вікна можна сховати або відобразити за допомогою відповідних команд меню View.

2. Порядок створення програм та запуску їх на виконання за допомогою середовища Visual C++

Розглянемо процес створення нового файлу за допомогою середовища Microsoft Visual C ++. Для цього слід виконати команду File Ú New або натиснути комбінацію клавіш Ctrl + N. В результаті відкриється наступне вікно:

Як видно з малюнку, середовище дозволяє створювати різноманітну кількість різних типів проектів, але найпростішою з них є звичайна програма на мові С++. Для того, щоб створити таку програму, необхідно перейти на закладку Files і вибрати пункт С++ Source file.

В процесі введення тексту програми часто виникає потреба вносити або відміняти останні правки, або ж кілька разів копіювати одні і ті ж самі фрагменти тексту. Для цього використовуються команди меню Edit або відповідні “гарячі” клавіші:

Як видно з малюнку, засоби цього меню, а також функції “гарячих” клавіш є універсальними і використовуються у всіх Windows -програмах.

Після того, як користувач набрав весь текст програми, потрібно виконати її компіляцію, а потім запуск на виконання. Це робиться за допомогою команд меню Build або відповідних “гарячих” клавіш:

Усі ці кнопки також можуть бути присутніми на панелі інструментів. Більшість із них присутня там по замовчуванню, але користувач також може відредагувати вигляд панелі інструментів за допомогою команди Tools Ú Customize :

Слід зазначити, що перед запуском програми на виконання повинно виконатись кілька підготовчих етапів. Тому після введення тексту програми кнопка її запуску на виконання скоріш за все буде неактивною. Крім того, якщо запустити певний етап виконання програми перед виконанням іншого попереднього етапу, то компілятор видасть повідомлення про потребу у попередньому виконанні інших дій. Наприклад якщо користувач ще не відкомпілював програму, а вже хоче запускати її на виконання, то йому буде видано повідомлення про потребу у компіляції:

Отже, з урахуванням вищесказаного, після введення тексту програми до її запуску на виконання потрібно провести дві операції: компіляцію та побудову виконавчого файлу (Build). Крім того, очевидним є те, що як програму, так і весь проект ще під час введення слід зберегти у вигляді окремих файлів на диску.

Компіляція – це лише процес перевірки програми на наявність помилок. Виконання операції Build передбачає створення об’єктного та виконавчого файлу. Якщо проект по розробці програми записаний у певну папку на диску, то усі виконавчі та об’єктні файли записуються у підпапку Debug:

Очевидно, що після створення об’єктного та виконавчого файлу програма може запускатись на виконання без використання компілятора. Також очевидним є той факт, що якщо у програмі є синтаксичні помилки – то перелік цих помилок буде виведено у консоль, і виконавчого файлу створено не буде. Також слід зазначити, що крім помилок, компілятор ще може видавати попередження (тобто вказувати на ті конструкції, які синтаксично є правильні, але їх використання може призвести до логічних помилок під час виконання програми). Наприклад під час компіляції програми в консоль може бути виведена така інформація:

Слід зазначити, що на відміну від компілятора мови Паскаль, де інформація про синтаксичні помилки виводилась по черзі, у С++ виводиться інформація про всі помилки одразу. З одної сторони це добре, оскільки помилка, яка появляється першою може бути наслідком неточностей у наступних рядках, за рахунок чого легше вияснити сутність помилки. Але з іншого боку, одночасна поява повідомлення про десятки помилок може вивести програміста із психологічної рівноваги, через що програмістам-початківцям помилки шукати стає важче.

Тому для того, щоб виявити помилку, слід повернути полосу прокрутки у консолі назад і виділити курсором текст рядка із повідомленням про помилку або попередження. При цьому компілятор автоматично виділить той рядок програми, у якому виникла помилка:

3.Особливості відлагодження програм за допомогою засобів середовища Visual C++

Очевидно, що у простих за змістом програмах логічні помилки виникають достатньо рідко, а виявляються достить легко. Якщо програма буде набагато складнішою – то внаслідок звичайного виконання програми логічні помилки виявити практично неможливо. Тому на допомогу програмісту приходять такі засоби як покрокове виконання програми ( Debug ), використання точок зупинки ( Breakpoints ), а також дослідження стану змінних ( Watch ). Розглянемо ці засоби детальніше.

Запуск процесу покрокового виконання програми відбувається шляхом виконання команд підменю Build  Start Debug. Далі слід виконати одну з команд Go ( F 5), Step Into ( F 11) або Run to Cursor ( F 10). У першому випадку программа буде покроково виконуватись спочатку, а в іншому – виконається до того місця, в якому стоїть курсор. Це зручно тому, що користувачу не потрібно буде довго чекати доти, поки виконання програми «дійде» до потрібного йому місця. В результаті вікно середовища змінить свій вигляд:

У цьому режимі з'явилась консоль вводу/виводу інформації, де будуть виводитись усі дані програми. Крім того, у нижній частині вікна з'явились два вікна - для нагляду за станом змінних. Крім цього, з’явився новий пункт меню Debug (відлагодження ), в якому появились нові команди:

 

Step Into – покрокове виконання програми із заходом у підпрограми (як процедури користувача, так і стандартні функції С++ (наприклад cout).

Step Over – покрокове виконання програми без заходу у підпрограми;

Step Out – продовження виконання програми шляхом виходу з підпрограми.

Очевидно, що найбільш доцільним є використання команди Step Over, і лише під час перевірки коректності роботи підпрограм, створених програмістом варто використовувати команду Step Into .

Покрокове виконання програми є недоцільним без використання засобів нагляду за змінними програми. У середовищі Visual C ++ вони реалізовані автоматично, тому що якщо під час покрокового виконання програми навести курсор на певну змінну – то автоматично буде відображено її значення:

Крім того, за допомогою команди QuickWatch можна задати нагляд за будь-якою змінною:

Ще одним засобом відлагодження є точки зупинки програми. Для того, щоб задати таку точку, потрібно перейти на певний рядок програми, натиснути праву кнопку миші і з контекстного меню вибрати команду Insert / Remove Breakpoint. Тоді після виконання команди Go підменю Start Debugging (або натиснення кнопки F 5) виконання програми буде зупинено у заданих користувачем точках. Але така операція буде мати сенс лише спільно із наглядом за станом змінних. Тому очевидно, що лише такі операції дозволять повноцінно виявляти усі логічні помилки в програмі.

Крім компіляторів різних мов програмування, у склад пакету Microsoft Visual Studio входить велика довідкова система MSDN ( MICROSOFT DEVELOPER NETWORK SUBSCRIPTION – підписка розробника). Вона має у своєму складі велику кількість різноманітних сервісних функцій, підручників, зразків програм, а також довідкові системи для кожної з мов програмування. Вона поставляється на окремих дисках і встановлюється на комп’ютер окремо. Тому з одного боку її використання надає потужні можливості щодо вивчення особливостей роботи із певним середовищем програмування. Але з іншого боку, якщо система MSDN не встановлена – то довідка для певного компонента Visual Studio відсутня, і тому програміст під час складання програми може покладатись лише на власні знання і матеріали книг, чого часто недостатньо.

Студент повинен

знати :

v Вигляд вікна середовища програмування Visual Studio.

v Призначення вікна проекту середовища програмування Visual Studio.

v Призначення робочої області середовища програмування Visual Studio .

v Призначення вікна виводу середовища програмування Visual Studio .

v Порядок створення програми та запуску їх на виконання за допомогою середовища Visual Studio .

v Порядок відлагодження програми у середовищі Visual Studio .

вміти :

v Створювати програми та запускати їх на виконання в середовищі Visual Studio .

v Налогоджувати програми в середовищі Visual Studio .

Питання для самоконтролю

1. Як виглядає вікно середовища програмування Visual Studio?

2. Назвіть призначення вікна проекту середовища програмування Visual Studio.

3. Назвіть призначення робочої області середовища програмування Visual Studio .

4. Назвіть призначення вікна виводу середовища програмування Visual Studio .

5. Назвіть порядок створення програми та запуску їх на виконання за допомогою середовища Visual Studio .

6. Назвіть порядок відлагодження програми у середовищі Visual Studio .

 Література

[1] с.118-123.


1.7. Класифікація вбудованих функцій С++


Питання для опрацювання

1. Категорії вбудованих функцій С++

2. Порядок використання вбудованих функцій під час написання програм.

Методичні рекомендації

Під час вивчення даної теми студенти мають о знайомитись із основними бібліотеками стандартних функцій С++, навчитись використовувати бібліотеки під час складання власних програм

1. Категорії вбудованих функцій С++.

Вбудовані функції ( inline ) — це функції, чиє тіло підставляється в кожну точку виклику, замість того, щоб генерувати код виклику. Модифікатор inline перед вказівкою типу результату в оголошенні функції загадує компілятору згенерувати копію коду функції у відповідному місці, щоб уникнути виклику цієї функції. У результаті виходить множина копій коду функцій, вставлених у програму, замість єдиної копії, якою передається керування при кожному виклику функції. Модифікатор inline необхідно застосовувати для невеликих і часто використовуваних функцій. Наприклад,

#include <iostream.h>

inline int min (int x1, int y1)

{ if (x1 < y1)

return (x1);

else

return (y1);

}

void main( )

{ int х, у, z;

{ cout << endl << "Введіть два цілих числа ";

cin >> х >> у;

z = min(х, у);

cout << endl << " Мінімальним з " << х << " і " << у << " є "

<< z;

}

Компілятор може ігнорувати модифікатор inline, якщо вбудований код надто великий, компілятор згенерує звичайний виклик функції.

2. Порядок використання вбудованих функцій під час написання програм.

Під час виконання програми генеруються коди для всіх функцій користувача. Коли відбувається звернення до тієї чи іншої функції, здійснюється виклик відповідного коду. Якщо до функції звертаються багато разів, то робота програми сповільнюється.

Щоб цього уникнути, можна використовувати вбудовані функції. Коди таких функцій вставляються компілятором у кожну точку виклику в основному коді. Це вимагає додаткового обсягу оперативної пам'яті, проте прискорює процес виконання програми.


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 751; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.086 с.)
Главная | Случайная страница | Обратная связь