Я знаю, что могу выполнить деление на 2, используя сдвиг вправо.
Для простоты возьмем 4-битную систему счисления
-1 - 1111
-2 - 1110
-3 - 1101
-4 - 1100
-5 - 1011
-6 - 1010
-7 - 1001
-8 - 1000
7 - 0111
6 - 0110
5 - 0101
4 - 0100
3 - 0011
2 - 0010
1 - 0001
0 - 0000
Если я попытаюсь выполнить
6 / 2 = 0110 >> 1 = 0011 = 3
-6/ 2 = 1010 >> 1 = 1101 = -3
Действителен как для + ve, так и для -ve числа
Однако, когда приходят к 1
1 / 2 = 0001 >> 1 = 0000 = 0
-1/ 2 = 1111 >> 1 = 1111 = -1
Похоже, что в -1 есть особый случай, когда правое смещение затем перемещает его в отрицательную бесконечность.
В настоящее время мне нужно поставить специальную проверку if, поскольку я ожидаю -1 / 2 = 0.
Мне было интересно, как вы справляетесь с этим исключением в вашем коде? Парень, если поставить чек?