Олег Протасовский | Репутация: 0(Без статуса)
5 февраля 2014 в 14:48
Заполнение нулями при смещении. Ошибка?
В вашем курсе Введение в програмирование. Лекция 3 текс 2 указано "Операции сдвига целочисленного значения выполняют сдвиг всех битов операнда, указанного слева, на число позиций, заданных операндом, указанным справа, а вместо сдвинутых битов записываются нули." В других источниках указано что в случае отрицательных чисел идет заполнение еденицами. Верно ли это?
Михаил Малинкин | Репутация: 1036(Эксперт)
5 февраля 2014 в 22:43
Здравствуйте, Олег. В лекции не ошибка, а, скорее, недочёт. Нет уточнения о каком сдвиге идёт речь. Всё зависит от того, в какую сторону производится сдвиг. Побитовый сдвиг влево, по сути, используется для быстрого умножения на 2. Тогда справа записываются нули, а крайний левый бит определяет знак числа. При сдвиге вправо, т.е. быстром делении на 2, сдвинутые биты слева заполняются нулями, если число положительное и единицами, если число отрицательное. Это справедливо для знаковых операторов сдвига. Подробнее можете почитать здесь: http://habrahabr.ru/post/187606/
Здравствуйте, Олег. В лекции не ошибка, а, скорее, недочёт. Нет уточнения о каком сдвиге идёт речь. Всё зависит от того, в какую сторону производится сдвиг. Побитовый сдвиг влево, по сути, используется для быстрого умножения на 2. Тогда справа записываются нули, а крайний левый бит определяет знак числа. При сдвиге вправо, т.е. быстром делении на 2, сдвинутые биты слева заполняются нулями, если число положительное и единицами, если число отрицательное. Это справедливо для знаковых операторов сдвига. Подробнее можете почитать здесь: http://habrahabr.ru/post/187606/