Операции сдвига

Контроль логических операций

 

К логическим операциям относятся операции сдвига, логического сложения и умножения, выполняемые по соответствующим правилам.

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

 

 

Пусть задано число А = апап-1 ...а1а0, имеющее контрольный код rа = аks...аk1.

Обозначим код числа А, сдвинутый влево, через (без циклического переноса) и (с циклическим переносом) (при сдвиге вправо стрелка в обозначении будет повернута направо). Соответствующим образом обозначим и контрольный код:; ; ; .

Cдвиг влево двоичного числа эквивалентен умножению на два. Так как при сдвиге числа происходит потеря некоторых его разрядов, можно предполагать, что контрольный код сдвинутого числа изменится на величину Δ:

,

где — сдвинутый влево контрольный код.

Величина Δ зависит от значений аn и аks,которые при сдвиге выходят за пределы разрядной сетки.

Если при сдвиге n-разрядного числа старшая единица выйдет за пределы разрядной сетки, то это эквивалентно вычитанию единиц из контрольного кода сдвинутого числа [— вес (n+ 1)-го разряда].

Если при сдвиге контрольного кода выходит за пределы разрядной сетки разряд аks = 1, то это эквивалентно уменьшению контрольного кода на 2S. Такую потерю надо восстановить прибавлением к контрольному коду единицы.

В общем случае предыдущее уравнение принимает вид

.

Веса разрядов кодовой комбинации, представленной в системе с основанием 2S, назначаются следующим образом:

 

s=3 an an-1 an-2 an-3…a3 a2 a2
Вес σ 22 21 20 22…22 21 20

 

В результате значения поправок Δ для контроля выполнения левого сдвига по модулю будут:

 

Значение an ….
Значение aks ….
Поправка Δ…. -1 +1

 

Значение поправки Δ можно заменить ее дополнением до модуля.

Для выполнения сдвига влево с циклическим переносом из старшего разряда в младший разряд необходимо уменьшить контрольный код на величину ; так как =1, этот член равен 0. Следовательно, предыдущая формула примет вид

.

При сдвиге вправо происходит потеря младших разрядов числа и контрольного кода этого числа. Так как сдвиг вправо эквивалентен делению на 2, то

; .

Эти потери надо компенсировать. Значит, контрольный код сдвинутого вправо числа можно найти по формуле

.

В зависимости от модуля поправка к контрольному коду в случае простого сдвига принимает следующие значения:

 

Значение a1 ….
Значение ak1 ….
Поправка Δ для:        
p = 3….
p = 7.…

 

При модифицированном сдвиге вправо, который выполняется по правилу A = 1, an-1, an-2…a2a1; = 1, an-1…a3a2, происходит также потеря младших разрядов кодовой комбинации числа и контрольного кода. Для этого случая предыдущая формула сохраняет свой вид, но поправки должны быть следующими:

 

Значение a1 ….
Значение ak1 ….
Поправка ΔM для:        
p = 3….
p = 7.…