我們都知道無論是八進位制、十進位制還是十六進製制的資料在計算機底層都是以二進位制數的加法來進行操作的,因此我們可以直接運算元據的位元位來實現兩個整型數的加法。
如圖:
圖中是兩個八位二進位制數的加法,從圖中我們可以看出當相同位數的值的和滿2時,便要向前進製,這和十進位制數的運算一樣,我們在進行二進位制位的操作時可以設乙個進製標誌cf,當相應的位數進行運算時,就要同時考慮進製標誌的狀態。我們可以用移位取出每乙個位元位進行運算,之後再將值放到相應的位元位中去,這樣就實現了兩個數的加法。看**:
int add(int left, int right)
else
}else if(leftbit+rightbit == 1)
else
}else
else
}sum |= (bit< 進行運算 ---> 放回相應位元位,下面看測試結果:
測試**:
int main()
測試結果:
可以看出,結果完全正確。
不用加減乘除實現兩個正整數的加法
很常見的一道題,網上也有各種各樣的解法,備忘一下。首先來看十進位制整數的加法,123 999,將其分為三步來運算 1 對每一位相加,不考慮進製。當有進製時,捨棄。如下 123 999 012 2 考慮進製的影響。觀察可發現,當個位相加有進製時,實際上少加了10,當百位有進製時,實際上少加了100,依...
不用加減乘除做加法與不用新的變數交換兩個變數的值
不用加減乘除做加法 第一步 不考慮進製對每一位相加,0加0的0,0加1的1,1加0的1,1加1的0,這個結果和異或的結果相同 第二步 只有1加1會進製,這個結果和與的結果相同 第三步 將兩步的結果相加,重複上面的操作,直到不產生進製 int add int num1,int num2 while n...
不用 實現兩個數相加
方法一 用邏輯運算 a b 表示a b 中每位不進製的和,a b 1 二進位制加法 1 1 1,把1左移以為10,1 1 10,表示a b 所有進製 思想是兩個數字相加中能分解成 不進製的和 每一位相加的進製 a b a b a b 1 如果a b 0的時候 a b a b 負整數運算也可以,因為補...