位运算求a+b
位運算
給出兩個整數(shù) a 和 b, 求他們的和。
挑戰(zhàn)
顯然你可以直接 return a + b,但是你是否可以挑戰(zhàn)一下不這樣做?(不使用+++等算數(shù)運算符)
鏈接linkcode題目:a+b
分析
主要利用異或運算來完成,異或運算有一個別名叫做:不進位加法,那么a ^ b就是a和b相加之后,該進位的地方不進位的結(jié)果,然后下面考慮哪些地方要進位,自然是a和b里都是1的地方, a & b就是a和b里都是1的那些位置,a & b << 1 就是進位之后的結(jié)果。
所以:a + b = (a ^ b) + (a & b << 1),令a' = a ^ b, b' = (a & b) << 1可以知道,這個過程是在模擬加法的運算過程,進位不可能一直持續(xù),所以b最終會變?yōu)?。因此重復做上述操作就可以 求得a + b的值。
總結(jié)
- 上一篇: 账户余额和可用余额为什么不一样
- 下一篇: 通信原理随机信号分析