寫乙個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算符號。
結論性思路:
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...