Python: пусть Python int переполняется, как C int

В Python, когда int больше 2 ** 31, тогда он будет выглядеть длинным:

a = 2147483647 a + 1 = 2147483648

b = -2147483648 b - 1 = -2147483649

но мне нужно переполнение int Python как int в C:

a = 2147483647 a + 1 = -2147483648

b = -2147483648 b - 1 = 2147483647

Возможно ли это? спасибо заранее!

Ответ 1

Попробуйте numpy:

>>> x = numpy.int32(2147483647)
>>> x
2147483647
>>> type(x)
<type 'numpy.int32'>
>>> x+1
__main__:1: RuntimeWarning: overflow encountered in long_scalars
-2147483648
>>> type(x+1)
<type 'numpy.int32'>

Просто убедитесь, что вы вызываете int, прежде чем передавать их в код, который ожидает нормального поведения переполнения Python.

Ответ 2

Вы можете определить свой собственный класс и переопределить специальный метод __int__() вместе с различными другими специальными методами математического оператора, чтобы эмулировать числовой тип. Тогда ваш класс может поддерживать инвариант, что значение всегда находится в правильном диапазоне.

Например:

def class Int32:
    def __init__(self):
        self.value = 0

    def __init__(self, value):
        # Wrap value into [-2**31, 2**31-1]
        self.value = (value + 2**31) % 2**32 - 2**31

    def __int__(self):
        return self.value

    def __add__(self, other):
       return Int32(self.value + other.value)

    # ... etc. for other mathematical operators