Топ питань
Часова шкала
Чат
Перспективи

Бітовий зсув

зсув, під час якого останній елемент переміщується на початок (або навпаки) З Вікіпедії, вільної енциклопедії

Remove ads

Бітовий зсув ― зміна позицій бітів у машинному слові на одну і ту ж величину.

Більшість комп'ютерів не можуть напряму адресувати біти, які містяться групами по 8, 16, 32 або 64 бітів у машинних словах. Для забезпечення роботи з бітами існує багато машинних інструкцій, що включають різні типи зсувів. Всі зсуви схожі між собою поведінкою середніх бітів, які просто зсуваються вліво або вправо на певну величину. Однак, поведінка крайніх бітів, які виходять зі слова та які з'являються в слові, залежить від типу зсуву.

В електроніці бітові зсуви здійснюються в регістрах зсуву.

Remove ads

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

Thumb
Логічний зсув вліво
Thumb
Логічний зсув вправо

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

Приклад виконання логічного зсуву:

нехай є число 10101010b (в двійковій системі);
після зсуву вліво на 1 біт отримаємо число 01010100b;
після зсуву початкового числа вправо на 1 біт отримаємо число 01010101b.

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

Remove ads

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

Thumb
Арифметичний зсув вліво
Thumb
Арифметичний зсув вправо

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

Приклад виконання арифметичного зсуву:

нехай є число 11111010b = -6 (у двійковій системі);
Після зсуву вліво на 1 біт отримаємо число 11110100b = -12;
Після зсуву початкового числа вправо на 1 біт отримаємо число 11111101b = -3.

Легко помітити, що, за арифметичного зсуву, зсув вліво відповідає множенню на 2, а зсув вправо ― діленню на 2 (в загальному випадку — на основу системи числення) з округленням до -∞. Наприклад:

 1011 = -5          1111 = -1 
>> a 1             >> a 1 
 -------- 
 1101 = -3          1111 = -1 

Схемотехнічна реалізація операцій зсуву дуже проста. Саме тому ці операції рекомендують використовувати для операцій множення і ділення цілих чисел на числа, рівні степеням 2 (2, 4, 8, 16, 32, 64 і т. д.), якщо, звичайно, не заважає таке округлення від'ємних чисел.

Remove ads

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

Thumb
Циклічний зсув вліво
Thumb
Циклічний зсув вправо

Під час цього зсуву біт, що виходить, з'являється на місці того біта, який з'явився.

Приклад виконання циклічного зсуву:

нехай є число 11111010b (у двійковій системі);
після зсуву вліво на 1 біт отримаємо число 11110101b;
після зсуву початкового числа вправо на 1 біт отримаємо число 01111101b.

Циклічний зсув через біт переносу

Узагальнити
Перспектива
Thumb
Циклічний зсув вліво через біт переносу
Thumb
Циклічний зсув вправо через біт переносу

В архітектуру багатьох процесорів входить прапор переносу до наступного розряду (наприклад, cf на x86). Ця операція виконує циклічний зсув над (n+1)-бітовим числом, що складається з регістра і прапора переносу.

Наприклад, якщо в регістрі число 11111010b, а прапор переносу дорівнює 0:

після зсуву вліво на 1 біт: у регістрі 11110100b, прапор переносу дорівнює 1;
після зсуву вправо на 1 біт: у регістрі 01111101b, прапор переносу дорівнює 0.

Операція циклічного зсуву через біт переносу використовується для роботи з багатобайтовими числами. Зокрема, щоб зсунути вправо на 1 біт довге число, потрібно очистити[1] cf (у разі ділення числа зі знаком потрібно записати в cf старший біт старшого слова) і циклічно зсунути на одиницю через cf кожне слово, починаючи з верхнього.

Наприклад, нехай є число 011000111100b, що займає три 4-бітових слова:

Було: HI = 0110, MED = 0011, LO = 1100, cf = 0 
Після зсуву HI: HI = 0011, MED = 0011, LO = 1100, cf = 0 
Після зсуву MED: HI = 0011, MED = 0001, LO = 1100, cf = 1 
Після зсуву LO: HI = 0011, MED = 0001, LO = 1110, cf = 0 

Зсув через регістр прапорів більш ніж на 1 біт практично не використовують.

Remove ads

Див. також

Примітки

Посилання

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads