Битовые операции над целым числом в процессоре Python зависят? - PullRequest
2 голосов
/ 21 июня 2019

Этот ответ говорит о том, что порядковый номер целого числа в python зависит от архитектуры процессора.Означает ли это, что побитовые операции типа

msg = 0
msg |= 1 << n

дают разные результаты на разных компьютерах, в зависимости от процессора?

Коллега рекомендовал мне использовать x*2**n вместо x << n, потому чтопервый должен быть независимым от платформы.Но мне это действительно не нравится, потому что это затуманивает мое намерение установить конкретный бит в сообщении, которое будет отправлено через шину can, и может потребовать большей вычислительной мощности (я не знаю, на какую оптимизацию способен интерпретатор python).Приведет ли это к другому результату (при условии, что и x, и n являются положительными целыми числами)?

1 Ответ

2 голосов
/ 21 июня 2019

Битовые операции, подобные этой, не зависят от аппаратного порядка на любом языке, даже на C. Эти виды операций происходят после загрузки числа в регистр ЦП, и в этот момент расположение в памяти не имеет значения. , Вы можете думать о них по существу как о арифметических операциях, таких как + или -.

Итак, ваш коллега ошибается, x << n означает то же самое на всех платформах. Фактически, практически весь «базовый» язык Python работает одинаково на всех платформах. Отличаются только очень специфичные для платформы функции в стандартной библиотеке.

Еще одна вещь, связанная с операцией shift: Python, в частности, немного особенный, поскольку он имеет целые числа бесконечной длины, но << работает так, как вы ожидаете. 1 << 1000 совпадает с 2**1000 и в общем случае x << n == x * (2**n), если x и n являются целыми числами.

...