Операции сдвига влево и вправо
Сдвиг влево (‹‹)
Задача данного оператора cдвинуть биты своего операнда на какое-то количество влево, начиная с младшего правого бита. Пустые места после сдвига заполняются нулями. Если размера числа будет недостаточно чтобы сохранить сдвинутые биты в левую сторону, они будут утеряны.
Мы собираемся взять число 0101 и сдвинуть его влево на 2 разряда.
Шаг 1:
Операnор перемещает все значения на один разряд влево и получается следующие (0)101Х
В скобочках число которое вышло за пределы ячейки отведенной для нашего 4 битного значения и было утеряно, а Х вакантное место и это вакантное место оператор заполнит нулем и получится: (0)101[0] И так мы видим, в круглых скобках что вышло и утеряно а в квадратных то что оператор вставил.
Шаг2:
На момент шага два мы имеем число 1010.
Оператор производит второй сдвиг и мы получаем вот такую ситуацию (01)010X
Как мы видим единица теперь оказалась в круглых скобках и ушла в никуда и опять образовалась вакансия в правой стороне, оператор в очередной раз радостно заполнит ее нулем и получим в итоге: (01)01[00] В круглых скобках та часть исходного числа что была утеряна так как вышла за пределы нашей 4-х битной ячейки а в квадратных скобках то что добавил оператор.
Как видно из таблицы, все биты сместились в лево на 2 позиции, и как вы можете заметить мы потеряли одну единицу, так как в нашем примере наши числа имеют длину лишь 4 бита.
И так в результате применения операции 0101 ‹‹ 2 будет 0100.
Сдвиг вправо (››)
Задача данного оператора cдвинуть биты своего операнда на какое-то количество вправо, начиная со старшего левого бита. Сдвиг вправо числа типа unsigned всегда заполняет освободившиеся биты нулями. Сдвиг вправо числа со знаком в некоторых системах приводи к заполнению этих битов значениями знакового бита, а в других нулями. Все младшие биты будут утеряны.
Как видно из таблицы, все биты сместились в право на 2 позиции, единица которая изначально была в 1 разряде вышла за границы и была утеряна.
И так в результате применения операции 0101 ›› 2 будет 0001.