2 只用位運算不用演算法運算實現整數的加減乘除運算

2021-10-07 01:38:15 字數 944 閱讀 2300

寫乙個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算符號。

結論性思路:

1.不考慮進製------>a^b就是正確答案。其中^是異或操作,即相同=0,不同=1

舉例1:0+1=1

二進位制:0000+ 0001=0001          0^1=1

舉例2:7+5=12

不進製情況下,7+5個位數為2,0111^0101=0010  換成十進位制也就是2

2.只算進製的情況下,即a+b進製時產生的值是什麼時------>(a&b)<<1

舉例:7+5=12

進製情況下,7+5十位數為10,0111&0101=0101    0101<<1=1010 換成十進位制也就是10

1)0111^0101=0010=2    0111&0101=0101<<1=1010=10

2)  0010^1010=1000=8    0010&1010=0010<<1=0100=4

3)  1000^0100=1100=12    1000&0100=0000<<1=0000=0

當(a&b)<<1最終=0時停止,最後得到結果12

public class solution 

return sum;

}}

實現a+b,只要實現a+(-b)就可以了

結論性小結:乙個數的相反數,是這個數的二進位制數表達取反+1(補碼)的結果。(即相反數=二進位制補碼)

//~n是給的數進行取反,之後呼叫前面給的add函式執行+1的操作,得到的結果相當於-b

public int negnum(int n)

//計算a+(-b)

public int minus(int a, int b)

只用位運算不用算術運算實現

題目 給定兩個32位整數a和b,可正 可負 可0.不能使用算術運算子,分別實現a和b的加減乘除。要求如果給定的a和b執行加減乘除的某些結果本來就會導致資料的溢位,那麼你實現的函式不必對那些結果負責。基本思路 加法運算 使用位運算實現加法運算主要分為兩個部分。先計算完全不考慮進製進行相加的結果,再計算...

用位運算實現不用加減乘除做加法

1.解題思路 使用位運算實現加法 1 一位加法 普通加法 異或 1 1 0 1 1 0 錯誤 1 0 1 1 0 1 正確 0 1 1 0 1 1 正確 0 0 0 0 0 0 正確 問題 沒有採取進製操作導致運算錯誤 難點 如何解決進製問題?與運算1 1 1 進製 1 0 0 不進製 0 1 0 ...

用Lua實現位運算

由於做禮包啟用碼的時候需要對啟用碼進行一些位運算,所以就寫了這個模組。一般這些位運算操作建議還是在c 裡面寫,由於遊戲已經發出去了,只想用自動更新來更新這個功能,所以逼於無奈只能先用lua來實現一下。如果有朋友也是遇到不方便更新c 只想用lua來實現的話,希望這裡可以幫到你。module commo...