Mysql:儲存過程
阿新 • • 發佈:2020-11-14
思路
方法:使用位運算實現二進位制加法
Java實現
1 class Solution { 2 public int add(int a, int b) { 3 int sum, carry; 4 while(b != 0) //運算到沒進位為止 5 { 6 sum = a ^ b; // 用異或運算求無進位和 7 carry = (a & b) << 1; 8 a = sum; 9 b = carry;10 } 11 return a; 12 } 13 }
C++實現
注意:C++不支援負值左移!!
有2種解決方法:
(1) a&b的結果強轉成unsigned int之後再左移。
1 class Solution { 2 public: 3 int add(int a, int b) 4 { 5 int sum, carry; 6 while(b != 0) //運算到沒進位為止 7 { 8 sum = a ^ b; // 用異或運算求無進位和9 carry = (unsigned int)(a & b) << 1; // C++不支援負值左移!!這裡要加上unsigned int 10 a = sum; 11 b = carry; 12 } 13 return a; 14 } 15 };
(2)用與 x 相與的方法人工去除最高位可能出現的 1, 之後再左移一位。
1 class Solution { 2 public int add(int a, int b) { 3int x = ~(1 << 31); 4 int sum, carry; 5 while(b != 0) //運算到沒進位為止 6 { 7 sum = a ^ b; // 用異或運算求無進位和 8 carry = (a & b & x) << 1; 9 a = sum; 10 b = carry; 11 } 12 return a; 13 } 14 }