Что такое логический сдвиг вправо
Перейти к содержимому

Что такое логический сдвиг вправо

  • автор:

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

Би́товый сдвиг — изменение позиций битов в слове на одну и ту же величину.

В основной своей массе компьютеры не могут напрямую адресовать биты, которые содержатся группами по 8, 16, 32 битов в словах. Для обеспечения работы с битами существует множество команд, к которым относятся и сдвиги: Все сдвиги похожи друг на друга поведением средних битов: они просто сдвигаются влево или вправо на определённую величину. И различаются поведением крайних битов: одного, который уходит из слова, и второго, который должен появиться в слове.

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

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

Логический сдвиг вправо

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

Пример работы операции сдвига:

Пусть у нас есть число 10101010b (в двоичной системе). Если сделать сдвиг влево на 1 бит, то получим число 01010100b Если сделать сдвиг вправо на 1 бит, то получим число 01010101b

В большинстве процессоров уходящий бит сохраняется в флаге переноса. Эта функция широко используется при работе с многобайтовыми числами.

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

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

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

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

Пример работы операции сдвига:

Пусть у нас есть число 11111010b=−6 (в двоичной системе). Если сделать сдвиг влево на 1 бит, то получим число 11110100b=−12 Если сделать сдвиг вправо на 1 бит, то получим число 11111101b=−3

Легко заметить, что при арифметическом сдвиге сдвиг влево соответствует умножению на 2, а сдвиг вправо делению на 2 (в общем случае — на основание системы счисления). Исключение: −1 >>a 1 = −1 (в общем случае это относится к числам от −1 до −p+1, где p — основание системы счисления).

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

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

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

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

При этом сдвиге уходящий бит появляется на месте появившегося.

Пример работы операции сдвига:

Пусть у нас есть число 11111010b (в двоичной системе). Если сделать сдвиг влево на 1 бит, то получим число 11110101b Если сделать сдвиг вправо на 1 бит, то получим число 01111101b

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

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

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

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

Источник

  • Лекция: «Битовые операции»
  • «Assembler&Win32. Курс молодого бойца.» Урок 11. «Биты, сдвиг логический, арифметический и циклический.»

Wikimedia Foundation . 2010 .

  • Логический круг
  • Логический позитивизм

Полезное

Смотреть что такое «Логический сдвиг» в других словарях:

  • Битовый сдвиг — Битовый сдвиг изменение позиций битов в слове на одну и ту же величину. Большинство компьютеров не могут напрямую адресовать биты, которые содержатся группами по 8, 16, 32 или 64 битов в словах. Для обеспечения работы с битами существует… … Википедия
  • Побитовый сдвиг — Битовый сдвиг изменение позиций битов в слове на одну и ту же величину. В основной своей массе компьютеры не могут напрямую адресовать биты, которые содержатся группами по 8, 16, 32 битов в словах. Для обеспечения работы с битами существует… … Википедия
  • Инвертор (логический элемент) — Битовые операции, иногда также булевы или логические операции[1] операции над битами, применяемые в программировании и цифровой технике, изучаемые в дискретной математике и математической логике. Содержание 1 Введение 1.1 … Википедия
  • Битовые операции — Не следует путать с булевой функцией. Битовая операция в программировании некоторые операции над цепочками битов. В программировании, как правило, рассматриваются лишь некоторые виды этих операций: логические побитовые операции и… … Википедия
  • Битовая операция — Битовые операции, иногда также булевы или логические операции[1] операции над битами, применяемые в программировании и цифровой технике, изучаемые в дискретной математике и математической логике. Содержание 1 Введение 1.1 … Википедия
  • Булевы операции — Битовые операции, иногда также булевы или логические операции[1] операции над битами, применяемые в программировании и цифровой технике, изучаемые в дискретной математике и математической логике. Содержание 1 Введение 1.1 … Википедия
  • Verilog — Класс языка: Язык описания аппаратуры Появился в: 1983 1984 Автор(ы): Phil Moorby, Prabhu Goel Расширение файлов: .v Verilog, Verilog HDL (англ. Verilog Hardwar … Википедия
  • XTEA — Создатель: Дэвид Уилер и Роджер Нидхэм Создан: 1997 г … Википедия
  • Camellia (алгоритм) — У этого термина существуют и другие значения, см. Camellia (значения). Camellia Создатель: Mitsubishi, NTT Создан: 2000 г. Опубликован: 2000 г. Размер ключа: 128, 192 или 256 бит Размер блока: 128 бит Число раундов … Википедия
  • Код Грея — 2 битный код Грея 00 01 11 10 3 битный код Грея 000 001 011 010 110 111 101 100 4 битный код Грея 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000 Код Грея система счисления, в которой два соседних значения… … Википедия
  • Обратная связь: Техподдержка, Реклама на сайте
  • �� Путешествия

Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.

  • Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
  • Искать во всех словарях
  • Искать в переводах
  • Искать в ИнтернетеИскать в этой же категории

Арифметические операции с фиксированной точкой

Операции сдвигов появились вместе с компьютерами. Они легко реализовываются на цифровых схемах и существуют практически на всех типах процессоров. В математике они заменяются операциями умножения и деления. Операции сдвигов удобно рассматривать на битовом представлении числа. При сдвиге все биты числа сдвигаются либо влево, либо вправо. Сдвиг на один бит влево равнозначен умножению на 2, сдвиг на один бит вправо равнозначен делению на 2. Есть отличия при операциях с беззнаковыми целыми числами и с целыми числами со знаком.

Логический (или беззнаковый) сдвиг влево

Логический сдвиг влево применяется при операциях над беззнаковыми целыми числами. При сдвиге влево все биты сдвигаются влево на один бит, старший бит отбрасывается, а в младший бит записывается 0. Если до операции в старшем бите была единица, то число после операции становится меньше исходного. В случае отбрасывания старшей единицы устанавливается флаг Carry.

Логический (беззнаковый) сдвиг вправо

Логический сдвиг вправо применяется при операциях над беззнаковыми целыми числами. При сдвиге вправо все биты сдвигаются вправо, отбрасывается младший бит, а в старший записывается 0. Если в младшем бите до операции была 1, то устанавливается флаг Carry.

Арифметический (для чисел со знаком) сдвиг вправо

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

Арифметический (для чисел со знаком) сдвиг влево

Арифметический сдвиг влево применяется при операциях со знаковыми целыми числами. При сдвиге влево все биты сдвигаются влево на один бит, старший бит отбрасывается, а в младший бит записывается 0. Если при сдвиге влево изменяется знаковый бит (с 1 на 0 или с 0 на 1), то происходит ситуация насыщение — устанавливается флаг Overflow и значение результата заменяется на максимальное целое число в случае, если до начала операции число было положительное или на минимальное целое, если до начала операции число было отрицательным. Арифметический сдвиг влево равнозначен выполнению операции умножения на 2.

Примеры

Рассмотрим использование арифметических и логических сдвигов. Для рассмотрения примеров выберем формат представления fractional данных.

Формат данных (Qm.n)

Общее количество бит (b) 8 16 24
Количество бит для целой части (m)
Количество бит для дробной части (n)

Введем произвольное значение вещественного числа в формате float-point. После введения, число автоматически конвертируется в формат fractional и его бинарное представления. Если исходное вещественное число выходит за пределы допустимого представления в формате fractional, то оно будет автоматически приведено к допустимым пределам. Например, попробуйте ввести 1 при выбранном формате Q1.15.

Сдвиги

Арифметический сдвиг
Логический сдвиг
Float-Point
Fractional16
Fractional2
Флаги
Overflow Carry

7. Чем​ ​ отличается​ ​ логический​ ​ сдвиг​ ​ двоичного​ ​ кода​ ​ от​ ​ арифметического​ ​ сдвига?

При​ ​​ логическом​ ​ сдвиге​ ​ ​ значение​ ​ последнего​ ​ бита​ ​ по​ ​ направлению​ ​ сдвига теряется​ ​ (копируясь​ ​ в​ ​ бит​ ​ переноса),​ ​ а​ ​ первый​ ​ приобретает​ ​ нулевое​ ​ значение. Арифметический​ ​ сдвиг​ ​ ​ аналогичен​ ​ логическому,​ ​ но​ ​ число​ ​ считается​ ​ знаковым, представленным​ ​ в​ ​ дополнительном​ ​ коде.​ ​ Так,​ ​ при​ ​ правом​ ​ сдвиге​ ​ старший​ ​ бит сохраняет​ ​ своё​ ​ значение.​ ​ Левый​ ​ арифметический​ ​ сдвиг​ ​ идентичен​ ​ логическому. Арифметический​ ​ сдвиг: Вывод: арифметический​ ​ сдвиг​ ​ отличается​ ​ от​ ​ логического​ ​ тем,​ ​ что​ ​ он​ ​ не изменяет​ ​ значение​ ​ старшего​ ​ бита,​ ​ и​ ​ предназначен​ ​ для​ ​ чисел​ ​ со​ ​ знаком.

8.​ Как​ ​ изменяется​ ​ значение​ ​ числа​ ​ при​ ​ арифметическом​ ​ сдвиге​ ​ на​ ​ 1​ ​ двоичный разряд​ ​ влево?

При арифметическом сдвиге сдвиг влево соответствует умножению на 2 (в общем случае​ ​ —​ ​ на​ ​ основание​ ​ системы​ ​ счисления).

9. Как​ ​ изменяется​ ​ значение​ ​ числа​ ​ при​ ​ арифметическом​ ​ сдвиге​ ​ на​ ​ 1​ ​ двоичный разряд​ ​ вправо?

При арифметическом сдвиге сдвиг вправо соответствует делению на 2 (в общем случае​ — на основание системы счисления). 10.​ ​​ ​ В​ ​ каком​ ​ порядке​ ​ следует​ ​ выполнять​ ​ действия​ ​ для​ ​ получения​ ​ прямого​ ​ кода двоичного​ ​ целого​ ​ числа​ ​ из​ ​ дополнительного​ ​ кода?​(НЕ​ ​ УВЕРЕН) Прямой​ ​ обратный​ ​ и​ ​ дополнительный​ ​ код​ ​ -​ ​ это​ ​ модели​ ​ представления целых​ ​ чисел​ ,​ ​ как​ ​ положительных,​ ​ так​ ​ и​ ​ отрицательных.​ ​ Во​ ​ всех​ ​ трех​ ​ кодах старший​ ​ разряд​ ​ указывает​ ​ на​ ​ знак​ ​ числа​ ​ и​ ​ он​ ​ равен​ ​ единице,​ ​ если​ ​ число отрицательное​ ​ и​ ​ нулю​ ​ в​ ​ противном​ ​ случае.​ ​ Остальные​ ​ разряды​ ​ содержат представление​ ​ модуля​ ​ числа.​ ​ Различие​ ​ между​ ​ кодами​ ​ наблюдается​ ​ именно​ ​ в способах​ ​ представления​ ​ модуля.​ ​ Для​ ​ положительного​ ​ числа​ ​ модуль​ ​ во​ ​ всех​ ​ трех кодах​ ​ представляется​ ​ одинаково​ ​ -​ ​ это​ ​ просто​ ​ естественная​ ​ запись​ ​​ двоичного числа​. Для​ ​ отрицательных​ ​ чисел,​ ​ в​ ​ обратном​ ​ коде​ ​ это​ ​ просто​ ​ поразрядная инверсия​ ​ прямого​ ​ кода,​ ​ а​ ​ в​ ​ дополнительном​ ​ -​ ​ к​ ​ обратному​ ​ коду,​ ​ как​ ​ к​ ​ числу, просто​ ​ прибавляется​ ​ единица. Вычесть​ ​ единицу​ ​ и​ ​ инвертировать,​ ​ кроме​ ​ бита​ ​ знака.

04.11.2020 980.83 Кб 13 OEVM_laby.pdf

Справочное руководство > Язык CFD > Побитовые логические операции > Циклический сдвиг вправо

Циклический сдвиг вправо. Устанавливает на выходе результат операции логического сдвига вправо двоичного представления значения входа «Значение», на число бит, заданное значением входа «Сдвиг, бит», при этом сдвиге уходящий бит появляется на месте появившегося свободного на другом конце числа.

Иными словами, результат эквивалентен результату операции копирования каждого бита в двоичном представлении входа «Значение» в позицию справа от него, произведенной число раз, заданное значением входа «Сдвиг, бит». При этом старший (самый левый) бит в двоичном представлении результата каждый раз получает значение, равное уходящему (самому младшему, выдвигаемому вправо) биту входного значения.

 Значение = 51001 = 0xC739 = 0b1100011100111001 Сдвиг, бит = 2 Результат = 29134 = 0x71CE = 0b0111000111001110 

Особенности

Операция циклического сдвига 16-и битного значения в любую сторону на 8 бит меняет местами его старший и младший байты.

Примеры

Циклический сдвиг на 8 бит — обмен местами старшего и младшего байта:

СМОТРИ ТАКЖЕ

  • Побитовое И
  • Побитовое ИЛИ
  • Побитовое НЕ
  • Побитовое исключающее ИЛИ
  • Сдвиг влево
  • Сдвиг вправо
  • Циклический сдвиг влево

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *