Бітовий зсув

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

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

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

Логічний зсув[ред.ред. код]

Логічний зрушення вліво
Логічний зрушення вправо

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

Приклад роботи операції зсуву:

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

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

Арифметичний зсув[ред.ред. код]

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

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

Приклад роботи операції зсуву:

Нехай у нас є число 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 і т. д.) - якщо, звичайно, таке округлення негативних чисел не заважає.

Циклічне зрушення[ред.ред. код]

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

При цьому зрушенні минає біт з'являється на місці з'явився.

Приклад роботи операції зсуву:

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

Циклічне зрушення через біт перенесення[ред.ред. код]

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

В архітектуру багатьох процесорів входить прапор переносу в наступний розряд (наприклад, 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 біт практично не використовуються.

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

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

  1. Можна замість очищення прапора для першого оброблюваного слова використовувати арифметичний \ логічний зрушення, якщо він привласнює прапору cf значення вийшов біта.

Посилання[ред.ред. код]


Комп'ютер Це незавершена стаття про комп'ютери.
Ви можете допомогти проекту, виправивши або дописавши її.