Команды сдвига

 

В программировании сдвигом называют одновременное перемещение границ расположения некоторой информации. Здесь можно провести хорошую аналогию с перемещениями, возникающими вследствие умножения или деления числа на какую-либо степень двойки. Пусть, например, некоторый байт содержит число 001000102. Сдвиг байта влево на 1 бит означает одновременное смещение всех его битов влево на 1 позицию.

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

Аналогично выполняются любые другие сдвиги. Рассмотрим в качестве еще одного примера сдвиг байта 10101110г на 3 разряда вправо.

В данном случае освободившиеся разряды располагаются в левом конце числа, содержимое же разрядов 5,6,7 утеряно. Заметим, что сдвиг не эквивалентен делению, если рассматривать содержимое байта как целое со знаком. Это очевидно, так как исходное число отрицательно, а результат положителен.

В ЭВМ Систем 360 и 370 возможны два типа сдвигов: арифметические и логические. Разница между ними заключается в обращении с содержимым знакового разряда. Сдвиги арифметического типа позволяют устранить возникшую в нашем последнем примере проблему сдвига знакового бита. Эти сдвиги обычно используются при обработке арифметической информации. Логические сдвиги выполняются так, как это и было описано выше, знаковый разряд в данном случае ничем не отличается от остальных.

Приведенные выше примеры касались сдвигов содержимого отдельных байтов. Необходимо отметить, что во всех ЭВМ Систем 360 и 370 все команды сдвига оперируют над содержимым регистров.

 



 
Оглавление
Статьи раздела