logo
АВС_Лек4_2013 / ИнтернентСсылкиАссемблерЛогика

Битовые сдвиги[править | править исходный текст]

Основная статья: Битовый сдвиг

К битовым операциям также относят битовые сдвиги. При сдвиге значения битов копируются в соседние по направлению сдвига. Различают несколько видов сдвигов — логический,арифметическийициклический, в зависимости от обработки крайних битов.

Также различают сдвиг влево(в направлении от младшего бита к старшему) ивправо(в направлении от старшего бита к младшему).

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

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

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

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

Логический сдвиг[править | править исходный текст]

При логическом сдвиге значение последнего бита по направлению сдвига теряется (копируясь в бит переноса), а первый приобретает нулевое значение.

Логические сдвиги влево и вправо используются для быстрого умножения и деления на 2, соответственно.

Арифметический сдвиг[править | править исходный текст]

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

Циклический сдвиг[править | править исходный текст]

При циклическом сдвиге, значение последнего бита по направлению сдвига копируется в первый бит (и копируется в бит переноса).

Также различают циклический сдвиг через бит переноса— при нём первый бит по направлению сдвига получает значение из бита переноса, а значение последнего бита сдвигается в бит переноса.

В языках программирования[править | править исходный текст]

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

Язык

НЕ

И

ИЛИ

Искл. ИЛИ

Сдвиг влево

Сдвиг вправо

Другие

C/С++, Java, C#, Ruby[4]

~

&

|

^

<<

>>

Pascal[5]

not

and

or

xor

shl

shr

PL/I[6]

INOT

IAND

IOR

IEOR

BOOL

¬

&

|

¬

Prolog[7]

\

/\

\/