кстати, вариант прибавления только последнего выдвинутого бита даёт арифметическое округление, что часто может оказаться даже удобнее Для простоты возьмём 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