Олег Протасовский
Олег Протасовский | Репутация: 0 (Без статуса) 5 февраля 2014 в 14:48
Заполнение нулями при смещении. Ошибка?

В вашем курсе Введение в програмирование. Лекция 3 текс 2 указано "Операции сдвига целочисленного значения выполняют сдвиг всех битов операнда, указанного слева, на число позиций, заданных операндом, указанным справа, а вместо сдвинутых битов записываются нули." В других источниках указано что в случае отрицательных чисел идет заполнение еденицами. Верно ли это?

 

Михаил Малинкин
Михаил Малинкин | Репутация: 1036 (Эксперт) 5 февраля 2014 в 22:43

Здравствуйте, Олег. В лекции не ошибка, а, скорее, недочёт. Нет уточнения о каком сдвиге идёт речь. Всё зависит от того, в какую сторону производится сдвиг. Побитовый сдвиг влево, по сути, используется для быстрого умножения на 2. Тогда справа записываются нули, а крайний левый бит определяет знак числа. При сдвиге вправо, т.е. быстром делении на 2, сдвинутые биты слева заполняются нулями, если число положительное и единицами, если число отрицательное. Это справедливо для знаковых операторов сдвига. Подробнее можете почитать здесь: http://habrahabr.ru/post/187606/