python整数の境界を越える問題の詳細解


pythonの内部は大きい整数の運算能力を持っていて、整数の運算はあふれないで、メモリが足りているのでさえすれば、oK
以下の例では、2つの32ビットの整数加算の場合(ビット演算により実現される)、オーバーフローの効果をシミュレートするためには、ビット演算を人工的に行う必要があります。演算子は逆を求めるか、それともバイナリの演算子を求めますか?

def getSum(a, b):
    """
    :type a: int
    :type b: int
    :rtype: int
    """
    MAX = 0X7fffffff
    MIN = 0X80000000
    while b != 0 :
     a,b = a^b,(a&b)<<1
     print(" a = {0:b},b = {1:b}".format(a,b))
    return a 
def getSum_(a, b):
    """
    :type a: int
    :type b: int
    :rtype: int
    """
    MAX = 0x7FFFFFFF
    MIN = 0x80000000
    mask = 0xFFFFFFFF
    while b != 0:
      a, b = (a ^ b) & mask, ((a & b) << 1) & mask
      print(type(a))
      print(" a = {0:b},b = {1:b}".format(a,b))
    return a if a <= MAX else ~(a^mask)
   
print(getSum_(-1,-1))
print(getSum(-1,1))
追加:python循環内部に複数の条件を追加して判定すると、オフラインが発生します。
1.ループトラバース配列は、条件変更を追加したい場合は、最初のものだけを削除します。

# -*- coding: utf-8 -*-

a=[11,22,33,44,55]

for i in a:
  if i == 11 or i ==22:
    a.remove(i)

for i in a:
  print(i)

'''
33
55
[Finished in 0.1s]
'''
2.行列に削除するべきです。

# -*- coding: utf-8 -*-

a=[11,22,33,44,55]

b=[]

for i in a:
  if i == 11 or i ==22:
    b.append(i)
for i in b:
  a.remove(i)
for i in a:
  print(i)

'''
33
44
55
[Finished in 0.1s]
'''
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。