ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
380904 Топик полностью
Bill (16.01.2013 16:50 - 16:54, просмотров: 226) ответил mazur на Можно подробнее?
Можно и подробнее. Возьмем для примера число -5. Используем без ограничения общности только 4 разряда, в данном случае этого достаточно. В дополнительном коде коде это будет 1011. Результат после арифметического сдвига будет 1101, т.е. мы получим число -3 (правильный результат - -2). Поэтому для отрицательных нечетных чисел требуется предварительна коррекция, которая выполняется путем прибавления 1: 1011 + 0001 = 1100 (-4). После сдвига мы получим 1110 (-2), т.е. результат правильный. Самый простой случай - число -1 (1111). После арифметического сдвига результат не изменится. Если предварительно скорректировать число как указано выше, результат стане равным 0. Или нет? PS: Подобный алгоритм оптимизации (замены деления сдвигами) используется в компиляторе GCC.