Специфична ли архитектура python int?
Мы можем определить переменные как целочисленные значения, например
x = 3
y = -2
И затем оперировать битами с бинарными операторами &
, |
, ^
и ~
. Вопрос в том, всегда ли мы получаем один и тот же результат на каждой архитектуре, или архитектура поведения специфична?
Можем ли мы всегда предполагать, что два дополняют представление целых чисел?
2 ответа:
Из документации python 2 (Курсив мой):
Простые целые числа: они представляют собой числа в диапазоне от -2147483648 до 2147483647. (диапазон может быть больше на машинах с большим натуральным размером слова, но не меньше.) когда результат операции выходит за пределы этого диапазона, результат обычно возвращается в виде длинного целого числа (в некоторых случаях вместо этого возникает исключение OverflowError). С целью сдвига и маски предполагается, что операции, целые числа имеют двоичную, дополняющую нотацию 2, использующую 32 или более бита и не скрывающую бит от пользователя (т. е. все 4294967296 различных битовых шаблонов соответствуют различным значениям).
Так что да: целые числа являются специфичной архитектурой для Python 2.
Простые целые числа: они представляют собой числа в неограниченном диапазоне, при условии наличия только виртуальной памяти. С целью: операции сдвига и маски, предполагается двоичное представление, и отрицательные числа представлены в варианте дополнения 2, которое дает иллюзию бесконечной строки знаковых битов, простирающихся влево.
Так что нет: целые числа не являются специфичной архитектурой для Python 3.
Python 2.x поддерживает два целочисленных типа:
int
иlong
.int
основан на базовом типе C long иlong
является типом произвольной точности. Очень ранняя версия Python (pre-2.2), рассматривала типы как два отдельных типа, но они были в основном объединены в Python 2.2. Питон 3.x использует только произвольный тип точности.Битовые операции ведут себя так, как если бы они применялись к числам дополнения произвольной точности 2. При необходимости
int
будет автоматически повышен доlong
в Python 2.x.Поведение непротиворечиво на разных платформах.