48は、加算、減算、乗算、除算をしません
問題:
書き込み機能、および2つの整数の和、機能がインビボで使用されなくてもよい+が必要、 - 、*、/四則記号。
ソリューション:
思想:
または2つの異なる数字が得られ、それは32ビットで定義されているビットPythonの制限、無ので、キャリー結果の加算を除きます
得られた二相の数、加算結果ビット桁制限に本明細書32を定義されないパイソン、なぜなら
キャリーがある場合、上記の結果の加算を継続する必要があります。以上の動作は、NUM1 0になるまで繰り返されます。
注:8ビットの値が範囲内に-128 +127に、即ち、(100000000から01111111)で表される、最初のビットは符号ビットです。
#32すなわち-2147483648 2147483647に0x7FFFFFFFでの数値範囲1,000,000,000,000,000 0000 0000 0000 0000、すなわち、で表すことができ、そのように
#は、ビットの数は制限しないPYTHONである、すなわち、最大オーバーフローが存在しない場合、それは最高の負を表していません符号ビットであるビット「1」、それは1,000,000,000,000,000 0000 0000 0000 0000みなさ2147483648になります。
〜(^ NUM1は0xFFFFFFFF):#は、境界チェックが必要とされ、対応する負の治療実行
NUM1 NUM1 <= 0x7FFFFFFFでビット単位の符号なし右シフト演算#python他に〜(^ NUM1は0xFFFFFFFF)が境界チェックを必要としない場合のリターンを
Pythonコード:
# -*- coding:utf-8 -*-
class Solution:
def Add(self, num1, num2):
# write code here
while (num2):
num1,num2=(num1^num2)& 0xFFFFFFFF,((num1&num2)<<1) & 0xFFFFFFFF
return num1 if num1<= 0x7FFFFFFF else ~(num1^0xFFFFFFFF)