寫乙個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算符號。
下面舉個例子:
13+11 = ?;
13 的二進位制 1 1 0 1 -----a 13
11 的二進位制 1 0 1 1 -----b 11
(a&b) <<1 -> 1 0 0 1
0 -----d 18
a^b -> 0 1 1
0 -----e 6
(d&e) <<1 -> 0 0 1
0 0 ------f 4
d^e -> 1 0 1
0 0 -----g 20
(f&g) <<1 -> 0 1
0 0 0 ------h 8
f^g -> 1 0
0 0 0
------i 16
(h&i) <<1 -> 0
0 0 0 0
------h 0 ---- --------退出迴圈
h^i -> 1 1 0 0 0
------i 24
總結出來的邏輯
//step1:按位與是檢視兩個數哪些二進位制位都為1,這些都是進製位,結果需左移一位,表示進製後的結果
//step2:異或是檢視兩個數哪些二進位制位只有乙個為1,這些是非進製位,可以直接加、減,結果表示非進製位進行加操作後的結果
//step3:n1&n2是檢視有沒有進製位了,如果有,需要重複step1、step2;
public int add(int num1,int num2) while (num2!=0);
return num1;
}
牛客網 不用加減乘除做加法
題目 寫乙個函式,求兩個整數之和,要求在函式體內不能使用 四則運算符。思路 不能用四則運算,那就只能利用位運算進行計算。十進位制計算 例如 27 85 112 分三步 1 對各位只做相加不進製,結果為2 2 考慮進製,7 5中有進製,進製的值是10 2 8有進製,進製的值是100 3 將前面的三個結...
牛客網 劍指offer 不用加減乘除做加法
題目描述 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。題目很簡單,但解決起來還是有一定難度的,說起代替加減乘除的方式,一下子能想起來的有sizeof,二進位制的位運算。sizeof行不通之後,又琢磨位運算中的異或,1 1 0,1 0 1,0 1 1,0 0 0。這個規則看起來最...
不用加減乘除做加法
author 過路的守望 思路 i 先將各bit位相加,不計進製,這一步可以用m n實現 ii 加上進製,進製如何來,用m n可以得到m和n中都為1的bit位,而不全為1的位則全部變為了0,該位相加會發生進製,使得左邊一位加1,因此 m n 1邊可得到進製後要加的1的位置 iii 將前面兩步的結果相...