Рассмотрим сдвиг влево:
Пусть у нас было число
, где
, число
отрицательное.
В первом случае, после сдвига влево на
, получаем число
, во втором случае получим cначала число
, затем
, ну а в итоге получим число
.
Числа
и
идентичны. Но предположим, что число
вышло за диапазон от -128 до 127, тогда чтобы получить чему же равно
в представлении компьютера надо прибавить к этому числу
, где
-- некоторое целое число, такое, что
входит в данный диапазон. Если у числа
было переполнение, то и у числа
тоже было переполнение, потому что числа
и
идентичны, проведём с ним ту же самую операцию, в итоге получим равные числа
и
, из этого следует, что 2 данных случая преобразования числа
всегда приводят нас к одному и тому же числу, не зависимо от того, было ли переполнение или нет.
Рассмотрим сдвиг вправо:
Сдвинем то же самое число на
позиций, получим
. Если же сначала взять модуль,
, потом сдвинуть,
, и взять отрицание, получим число
. Числа
и
равны тогда и только тогда, когда
делится нацело на
, в противном случае первое число будет на 1 меньше второго.
Здесь выход значащих бит у числа A, за пределы ячейки так же ничего не поменяет, как только все значащие биты выйдут за пределы ячейки, первое число будет равно -1, а второе 0.
Пример сдвига вправо: было число
, сдвигать будем на 1 позицию, получатся числа
, и
Хотелось бы услышать критику по поводу моих рассуждений