Википедия

Битовый сдвиг

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

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

В электронике битовые сдвиги выполняются на сдвиговых регистрах.

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

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

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

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

  • Пусть у нас есть число imageдвоичной системе).
  • Если сделать сдвиг влево на 1 бит, то получим число image.
  • Если сделать сдвиг исходного числа вправо на 1 бит, то получим число image.

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

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

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

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

Пример № 1

Пример работы операции сдвига 8 битного числа в прямом коде:

  • Пусть у нас есть 8 битное число: 00000010b = 2. (записанное в двоичной системе, в прямом коде).
  • Cдвиг влево на 1 бит, даёт число: 00000100b = 4.
  • Сдвиг вправо на 1 бит, даёт число: 00000001b = 1.

Пример № 2

Пример работы операции сдвига 8 битного числа записанного в дополнительном до 2х коде:

  • Пусть у нас есть число 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 и т. д.) — если, конечно, такое округление отрицательных чисел не мешает.

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

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

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

Широко используется в криптографии.

Пример

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

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

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

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

Например, если у нас в регистре число 11111010b, флаг переноса циклического сдвига вправо равен 0.

  • После сдвига влево на 1 бит в регистре 11110101b, флаг переноса равен 1.
  • Далее, после сдвига вправо на 1 бит в регистре 01111101b, флаг переноса равен 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. «Биты, сдвиг логический, арифметический и циклический.»

Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер, Информация о Битовый сдвиг, Что такое Битовый сдвиг? Что означает Битовый сдвиг?

Bi tovyj sdvig izmenenie pozicij bit v mashinnom slove Bolshinstvo kompyuterov ne mogut napryamuyu adresovat bity kotorye soderzhatsya gruppami po 8 16 32 ili 64 bita v mashinnom slove Dlya obespecheniya raboty s bitami sushestvuet mnozhestvo mashinnyh instrukcij vklyuchayushie razlichnye tipy sdvigov Vse sdvigi pohozhi drug na druga povedeniem srednih bitov kotorye prosto sdvigayutsya vlevo ili vpravo na opredelyonnuyu velichinu Odnako povedenie krajnih bitov kotorye uhodyat iz slova i kotorye poyavlyayutsya v slove zavisit ot tipa sdviga V elektronike bitovye sdvigi vypolnyayutsya na sdvigovyh registrah Logicheskij bezznakovyj sdvigLogicheskij sdvig vlevo Logicheskij sdvig vpravo Sdvig pri kotorom uhodyashij bit ischezaet ne vliyaya na ostavshiesya bity a na meste poyavivshegosya bita zapisyvaetsya bit 0 Primer raboty operacii sdviga Pust u nas est chislo 101010102 displaystyle 10101010 2 v dvoichnoj sisteme Esli sdelat sdvig vlevo na 1 bit to poluchim chislo 010101002 displaystyle 01010100 2 Esli sdelat sdvig ishodnogo chisla vpravo na 1 bit to poluchim chislo 010101012 displaystyle 01010101 2 V bolshinstve processorov uhodyashij bit sohranyaetsya vo flage perenosa Eta funkciya shiroko ispolzuetsya pri rabote s mnogobajtovymi chislami Arifmeticheskij znakovyj sdvigArifmeticheskij sdvig vlevo Arifmeticheskij sdvig vpravo Pri etom sdvige slovo rassmatrivaetsya ne prosto kak gruppa bitov a kak celoe chislo v dopolnitelnom kode Pri sdvige vlevo vedyot sebya kak logicheskij sdvig pri sdvige vpravo uhodyashij bit ischezaet ne vliyaya na ostavshiesya bity a na meste poyavivshegosya bita ustanavlivaetsya bit sootvetstvuyushij znaku Primer 1 Primer raboty operacii sdviga 8 bitnogo chisla v pryamom kode Pust u nas est 8 bitnoe chislo 00000010b 2 zapisannoe v dvoichnoj sisteme v pryamom kode Cdvig vlevo na 1 bit dayot chislo 00000100b 4 Sdvig vpravo na 1 bit dayot chislo 00000001b 1 Primer 2 Primer raboty operacii sdviga 8 bitnogo chisla zapisannogo v dopolnitelnom do 2h kode Pust u nas est chislo 11111010b 6 v dvoichnoj sisteme v dopolnitelnom kode Esli sdelat sdvig vlevo na 1 bit to poluchim chislo 11110100b 12 Esli sdelat sdvig ishodnogo chisla vpravo na 1 bit to poluchim chislo 11111101b 3 Vyvod Legko zametit chto pri arifmeticheskom sdvige sdvig vlevo sootvetstvuet umnozheniyu na 2 a sdvig vpravo deleniyu na 2 v obshem sluchae na osnovanie sistemy schisleniya s okrugleniem k Naprimer 1011 5 1111 1 gt gt a 1 gt gt a 1 1101 3 1111 1 Shemotehnicheskaya realizaciya operacij sdviga ochen prosta Imenno poetomu eti operacii rekomenduyut ispolzovat dlya operacij umnozheniya i deleniya celyh chisel na chisla ravnye stepeni 2 2 4 8 16 32 64 i t d esli konechno takoe okruglenie otricatelnyh chisel ne meshaet Ciklicheskij sdvigCiklicheskij sdvig vlevo Ciklicheskij sdvig vpravo Pri etom sdvige uhodyashij bit poyavlyaetsya na meste poyavivshegosya svobodnogo na drugom konce chisla Shiroko ispolzuetsya v kriptografii Primer Pust u nas est chislo 11111010b v dvoichnoj sisteme Esli sdelat sdvig vlevo na 1 bit to poluchim chislo 11110101b Esli sdelat sdvig ishodnogo chisla vpravo na 1 bit to poluchim chislo 01111101b Ciklicheskij sdvig cherez bit perenosaCiklicheskij sdvig vlevo cherez bit perenosa Ciklicheskij sdvig vpravo cherez bit perenosa V arhitekturu mnogih processorov vhodit flag perenosa v sleduyushij razryad naprimer cf na x86 Dannaya operaciya vypolnyaet ciklicheskij sdvig nad n 1 bitnym chislom sostoyashim iz registra i flaga perenosa Naprimer esli u nas v registre chislo 11111010b flag perenosa ciklicheskogo sdviga vpravo raven 0 Posle sdviga vlevo na 1 bit v registre 11110101b flag perenosa raven 1 Dalee posle sdviga vpravo na 1 bit v registre 01111101b flag perenosa raven 1 Operaciya ciklicheskogo sdviga cherez bit perenosa ispolzuetsya pri rabote s mnogobajtovymi chislami V chastnosti chtoby sdvinut vpravo na 1 bit dlinnoe chislo nuzhno ochistitcf v sluchae deleniya chisla so znakom nuzhno zapisat v cf starshij bit starshego slova i ciklicheski sdvinut na edinicu cherez cf kazhdoe slovo nachinaya s verhnego Naprimer pust u nas est chislo 011000111100b zanimayushee tri 4 bitnyh slova Bylo HI 0110 MED 0011 LO 1100 cf 0 Posle sdviga HI HI 0011 MED 0011 LO 1100 cf 0 Posle sdviga MED HI 0011 MED 0001 LO 1100 cf 1 Posle sdviga LO HI 0011 MED 0001 LO 1110 cf 0 Sdvigi cherez registr flagov bolee chem na 1 bit prakticheski ne ispolzuyutsya Sm takzheRegistr sdviga s linejnoj obratnoj svyazyu SchyotyPrimechaniyaMozhno vmesto ochistki flaga dlya pervogo obrabatyvaemogo slova ispolzovat arifmeticheskij logicheskij sdvig esli on prisvaivaet flagu cf znachenie vyshedshego bita Ssylki Assembler amp Win32 Kurs molodogo bojca Urok 11 Bity sdvig logicheskij arifmeticheskij i ciklicheskij U etoj stati est neskolko problem pomogite ih ispravit Etu statyu neobhodimo ispravit v sootvetstvii s pravilami Vikipedii ob oformlenii statej Pozhalujsta pomogite uluchshit etu statyu 19 noyabrya 2006 Eta statya nuzhdaetsya v pererabotke Pozhalujsta utochnite problemu v state s pomoshyu bolee uzkogo shablona Pozhalujsta uluchshite statyu v sootvetstvii s pravilami napisaniya statej 5 noyabrya 2010 Pozhalujsta posle ispravleniya problemy isklyuchite eyo iz spiska parametrov Posle ustraneniya vseh nedostatkov etot shablon mozhet byt udalyon lyubym uchastnikom

NiNa.Az

NiNa.Az - Абсолютно бесплатная система, которая делится для вас информацией и контентом 24 часа в сутки.
Взгляните
Закрыто