利用二進制運算實現加法(不使用四則運算)

這兩天去參加面試碰到的一個題,題不難,就是忘記了。

題目: 要求求兩個整數之和,並且不得使用+、-、*、/ 四則運算符號。
解析: 很明顯這個題要用二進制運算去解決。

  • 二進制的按位相加實際等效於異或。
  • 二進制的每位的進位計算等效於按位與,然後左移。
  • 進位加上按位相加結果就是最終結果。 重複使用前兩步,直到沒有進位爲止。

代碼如下:

#include <stdio.h>

int Add(int num1, int num2)
{
    int sum,carry;
    do
    {
        sum = num1^num2;
        carry = (num1 & num2)<<1;
        
        num1 = sum;
        num2 = carry;
        printf("%d,%d\n",num1,num2);  // 打印輸出可以更方便看懂內部運行邏輯
    }
    while(num2!=0);
    return num1;
}

int main()
{
    int num1,num2;
    scanf("%d%d",&num1,&num2);
    printf("%d\n",Add(num1,num2));
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章