ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
381304 Топик полностью
koyodza (17.01.2013 17:43 - 18:21, просмотров: 267) ответил koyodza на элементарно. Только выше я ошибся - не последний выдвинутый бит, а логическая сумма (обычно удобно использовать флаг Z) всех выдвинутых битов
кстати, вариант прибавления только последнего выдвинутого бита даёт арифметическое округление, что часто может оказаться даже удобнее Для простоты возьмём 8-битные переменные. Пусть делим на 8, для этого нужно сдвинуть 3 раза.
8 это 0000 1000, сдвиг с копированием старшего бита получаем 0000 0001, прибавляется 0, получаем 1   -> 8/8=1.0     -> 1
7 это 0000 0111, сдвиг с копированием старшего бита получаем 0000 0000, прибавляется 1, получаем 1   -> 7/8=0.875   -> 1
6 это 0000 0110, сдвиг с копированием старшего бита получаем 0000 0000, прибавляется 1, получаем 1   -> 6/8=0.75    -> 1
5 это 0000 0101, сдвиг с копированием старшего бита получаем 0000 0000, прибавляется 1, получаем 1   -> 5/8=0.625   -> 1
4 это 0000 0100, сдвиг с копированием старшего бита получаем 0000 0000, прибавляется 1, получаем 1   -> 4/8=0.5     -> 1
3 это 0000 0011, сдвиг с копированием старшего бита получаем 0000 0000, прибавляется 0, получаем 0   -> 3/8=0.375   -> 0
2 это 0000 0010, сдвиг с копированием старшего бита получаем 0000 0000, прибавляется 0, получаем 0   -> 2/8=0.25    -> 0
1 это 0000 0001, сдвиг с копированием старшего бита получаем 0000 0000, прибавляется 0, получаем 0   -> 1/8=0.125   -> 0
0 это 0000 0000, сдвиг с копированием старшего бита получаем 0000 0000, прибавляется 0, получаем 0   -> 0/8=0.0     -> 0
-1 это 1111 1111, сдвиг с копированием старшего бита получаем 1111 1111, прибавляется 1, получаем 0  -> -1/8=-0.125 -> 0
-2 это 1111 1110, сдвиг с копированием старшего бита получаем 1111 1111, прибавляется 1, получаем 0  -> -2/8=-0.25  -> 0
-3 это 1111 1101, сдвиг с копированием старшего бита получаем 1111 1111, прибавляется 1, получаем 0  -> -3/8=-0.375 -> 0
-4 это 1111 1100, сдвиг с копированием старшего бита получаем 1111 1111, прибавляется 1, получаем 0  -> -4/8=-0.5   -> 0
-5 это 1111 1011, сдвиг с копированием старшего бита получаем 1111 1111, прибавляется 0, получаем -1 -> -5/8=-0.625 -> -1
-6 это 1111 1010, сдвиг с копированием старшего бита получаем 1111 1111, прибавляется 0, получаем -1 -> -6/8=-0.75  -> -1
-7 это 1111 1001, сдвиг с копированием старшего бита получаем 1111 1111, прибавляется 0, получаем -1 -> -7/8=-0.875 -> -1
-8 это 1111 1000, сдвиг с копированием старшего бита получаем 1111 1111, прибавляется 0, получаем -1 -> -8/8=-1.0   -> -1