Двійковий зсув

Матеріал з Вікіпедії — вільної енциклопедії.
Версія від 14:43, 13 квітня 2017, створена ReAl (обговорення | внесок) (Виправлення помилок — зсув не на N розрядів (бітовий) а на просто N.)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Двійковий зсув[1],також згадується як зсув-К[2] зсув -Н, надлишковий код — це цифрова схема кодування, де код з усіма нулями відповідає мінімальному негативному значенню, а код з усіма одиницями — максимальному позитивному значенню. Немає чіткого стандарту для двійкового зсуву, але найчастіше зміщення для n-бітового двійкового слова використовується як K = 2n−1. Це призводить до того, що значення «нуль» переходить в 1 у найбільш значущих бітах, і нуль — у всіх інших. В цілому, ця дія комфортна та зручна; все одно, що використовувати додатковий код (доповнення до 2), за винятком того, що найбільш значущий біт інвертується. Це також означає, що в операції логічного порівняння, людина отримує той же результат, що і з числовим порівнянням додаткового коду. Варто відзначити, що запис логічного порівняння аналогічна з числовим порівнянням додаткового коду, якщо тільки в порівнюваних числах однаковий знак. Від'ємні значення повинні бути не більше, ніж позитивні, інакше вони будуть інвертовані.

Такий зсув використовувався, наприклад, для запису експоненти числа з рухомою комою в комп'ютерах IBM System/360 і System/370. Старший біт одного байта містить знак мантиси; експонента прийняла форму семибітного числа зі зсувом на 64 (27-1)[3]. 8-розрядна експонента у двійковому форматі Microsoft[en] з рухомою комою, який використовується в різних мовах програмування в 1970-х і 1980-х років, була закодована за допомогою зсуву на 129.

Стандарт IEEE використовує різні розміри експоненти, а також позначення зсуву для формату кожної точності. Однак, замість того, щоб використовувати зсув 2n−1, він використовує зсув 2n−1− 1 (тобто зсув-15, зсув-127, зсув-1023, зсув-16383). Це означає, що інвертування ведучого (найбільшого) біта експоненти не перетворює показник ступеня для правильного запису додаткового коду.

Двійковий зсув часто використовується в цифровій обробці сигналів (ЦОС). У більшості аналого-цифрові (АЦП) і цифро-аналогових перетворювачів (ЦАП) однополярні мікросхеми. Це означає, що вони не можуть впоратися з біполярними сигналами[en] (сигнали як позитивні, так і негативні). Простим рішенням є зсув аналогових сигналів зі зміщенням постійного струму, що дорівнює половині перетвореного діапазону АЦП і ЦАП. Потім цифрові дані будуть отримані в двійковому форматі зсуву.[4]

Більшість стандартних чипів ЦП комп'ютера не можуть обробляти двійковий зсув безпосередньо. Чипи ЦП, як правило, можуть обробляти тільки знакові й беззнакові цілі числа, а також значення з рухомою комою. Значення двійкового зсуву можуть бути оброблені декількома способами за допомогою цих чипів ЦП. Дані можуть розглядатися просто як цілі числа без знака, що змушує програміста розібратися зі зсувом нуля в програмному забезпеченні, або можуть бути перетворені в цілочисельний формат (який ЦП може обробляти спочатку), просто віднімаючи зсув нуля. В результаті, загальний зсув для N-розрядного слова — 2(n-1), де потрібно просто інвертувати перший біт в додатковий код, без дії віднімання. Це іноді є корисним спрощенням в обладнанні, і також може бути зручним у програмному забезпеченні.

Порівняльна таблиця двійкового зсуву для біта, з додатковим кодом.[5]

Код двійкового зсуву , K = 8 Десятковий код Двійковий код
1111 7 0111
1110 6 0110
1101 5 0101
1100 4 0100
1011 3 0011
1010 2 0010
1001 1 0001
1000 0 0000
0111 −1 1111
0110 −2 1110
0101 −3 1101
0100 −4 1100
0011 −5 1011
0010 −6 1010
0001 −7 1001
0000 −8 1000

Двійковий зсув може бути перетворений в додатковий код — інвертуємо значущий біт. Наприклад, з 8-бітовим значенням застосовується операція XOR з 0×80 для того, щоб перетворити в додатковий код. У спеціалізованому обладнанні простіше зрозуміти його положення, але для цього слід застосовувати в перевернутому значенні.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Chang, Angela; Chen, Yen; Delmas, Patrice (2006-03-07). «2.5.2: Data Representation: Offset binary representation (Excess-K)». COMPSCI 210S1T 2006 (PDF). Department of Computer Science, The University of Auckland[ru], NZ. p. 18. Retrieved 2016-02-04.
  2. Chang, Angela; Chen, Yen; Delmas, Patrice (2006-03-07). «2.5.2: Data Representation: Offset binary representation (Excess-K)». COMPSCI 210S1T 2006 (PDF). Department of Computer Science, The University of Auckland, NZ. p. 18. Retrieved 2016-02-04.
  3. IBM System/360 Principles of Operation Form A22-6821. Various editions available on the WWW.
  4. Electrical and Computer Science Department, Southeastern Massachusetts University[en], North Dartmouth, MA, USA (1988). Chen, Chi-hau, ed. Signal Processing Handbook. New York, USA:Marcel Dekker, Inc.[en]/CRC Press. ISBN 0-8247-7956-8. Retrieved 2016-02-04.
  5. «Data Conversion Binary Code Formats» (PDF). Intersil Corporation[ru] (published 2000). May 1997. AN9657.1. Retrieved 2016-02-04.