Почему while (n) n = n >> 1 цикл не заканчивается отрицательным n - PullRequest
1 голос
/ 04 октября 2019

Моя цель состояла в том, чтобы написать программу для подсчета количества битов, необходимых для представления числа в python, на случай, если я выберу number = -1 или любое отрицательное число, программа не завершится, вот мой код:

number = -1
cnt = 0
while(number!=0):
    number = number>>1
    cnt+=1
print(cnt)

Я думал, что это должно напечатать 32 и заканчивается. это одинаково для всех отрицательных чисел. Буду признателен, если вы укажете причину этого.

1 Ответ

3 голосов
/ 04 октября 2019

Арифметическое смещение вправо округляет в сторону -infinity на обычном процессоре или на языке, подобном C. Я предполагаю, что в Python то же самое.

Вы, вероятно, думаете о целых числах дополнения 2, где -1все биты установлены. Сдвиги вправо со сдвигом 2 в дополнение к знаку сдвигаются в копии знакового бита, а не в ноль.

-1 >> 1 = -1


Целые числа Python имеют произвольную точность, поэтому это нене имеет большого смысла. Максимальная ширина практически не ограничена.

...