python整数の境界を越える問題の詳細解
pythonの内部は大きい整数の運算能力を持っていて、整数の運算はあふれないで、メモリが足りているのでさえすれば、oK
以下の例では、2つの32ビットの整数加算の場合(ビット演算により実現される)、オーバーフローの効果をシミュレートするためには、ビット演算を人工的に行う必要があります。演算子は逆を求めるか、それともバイナリの演算子を求めますか?
1.ループトラバース配列は、条件変更を追加したい場合は、最初のものだけを削除します。
以下の例では、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]
'''
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。