不用加減號求兩個數的和

分析:以10 + 15爲例 10的二進制爲 1 0 1 0,15的二進制爲 1 1 1 1,

可以這樣做:

1、先給這兩個數加起來不考慮進位,這樣得到的結果爲 0 1 0 1,會發現與^得到的結果相同,與是先給兩個數

做^運算;

2、接下來考慮進位,兩個二進制數相加會有這麼幾種情況 1 1,0 0, 1 0, 0 1除第一種情況外其他情況均不產生進位,而1 1兩數相加進1,結果得0,可以這樣做先將兩個數做&運算,再將結果左移1位,這樣就模擬了進位  

3、將第1步得到的沒進位的和 和第2步的進位相加便是結果

int bitAdd(int num1, int num2)
{
	if (0 == num2)
		return num1;
	
	int sum = num1 ^ num2;
	int carry = (num1 & num2) << 1;
	return bitAdd(sum, carry);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章