旧魏は学ぶためにあなたを取るの申し出を受賞---ブラシタイトルシリーズ(加算、減算48は加算をしません)

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)
公開された160元の記事 ウォン称賛30 ビュー70000 +

おすすめ

転載: blog.csdn.net/yixieling4397/article/details/105067952