Похоже, вы неправильно понимаете, как работают смены.
Сдвиг не добавляет ноль влево или вправо.Вы не можете просто добавлять цифры, их так много.Давайте возьмем ваше число, десятичное число 11.
int n = 11;это 1011
Это правда, но это только половина истории.Смотрите, числа имеют фиксированный размер в вашем процессоре.Для целых чисел это 32 бита, но для упрощения предположим, что 8-битные числа.Ваш 11 выглядит так:
+-+-+-+-+-+-+-+-+
|0|0|0|0|1|0|1|1|
+-+-+-+-+-+-+-+-+
Он имеет 8 бит.Всегда.Теперь давайте сделаем сдвиг влево на 1:
+-+-+-+-+-+-+-+-+
0|0|0|0|1|0|1|1| |
+-+-+-+-+-+-+-+-+
После того, как вы сдвинулись, первый бит был «сдвинут».Там нет места для хранения этого бита.Кроме того, последний бит «пустой», мы не можем хранить «пустоту».Есть только один или ноль.Вместо этого мы «сдвигаем» нули.Таким образом, вы получите
+-+-+-+-+-+-+-+-+
|0|0|0|1|0|1|1|0|
+-+-+-+-+-+-+-+-+
При смещении вправо все наоборот.Мы снова начинаем с 11:
+-+-+-+-+-+-+-+-+
|0|0|0|0|1|0|1|1|
+-+-+-+-+-+-+-+-+
и сдвигаемся вправо на 1:
+-+-+-+-+-+-+-+-+
| |0|0|0|0|1|0|1|1
+-+-+-+-+-+-+-+-+
Снова, каждый бит сдвинут вправо на 1. Слева есть пустой бит, который,как и раньше, просто становится равным нулю.Справа вытащен, и нет места для его хранения.Это просто потеряно.Наше окончательное число:
+-+-+-+-+-+-+-+-+
|0|0|0|0|0|1|0|1|
+-+-+-+-+-+-+-+-+
Выше верно для чисел без знака, также называемых логическим смещением вправо .В системе с двумя дополнениями для чисел со знаком используется так называемое арифметическое смещение вправо , которое вместо смещения в нулевые биты сдвигается в знаковых битах.Т.е. если число отрицательное, следовательно, самый значимый бит равен единице, он сдвигается в единицу, в противном случае он сдвигается в ноль.