【牛客網(wǎng)·C語言練習(xí)】不用四則運算符如何實現(xiàn)兩數(shù)相加?
題目要求如圖

思考

不能使用四則運算,根據(jù)過往的學(xué)習(xí)經(jīng)歷,我唯一能想到的就是位操作符和移位操作符
例:使用位操作符進行int變量交換
位操作符的使用
先來回顧一下位操作符的作用
位操作符操作的是整形的二進制位,它的操作數(shù)是2,比較兩個整型的二進制位
(1)&按位與:對應(yīng)的二進制 全為1才是1,否則0
(2)|按位或:對應(yīng)的二進制 有1為1,全為0才為0
(3)^按位異或:相同為0,不同為1
比較一下正常的二進制相加和按位異或,發(fā)現(xiàn)按位異或是沒有進位的相加

原本應(yīng)該是010,但是按位異或后是000
1+1需要進位的1并沒有進到下一位里去
而使用按位與操作符,我們可以得到這兩個數(shù)相加需不需要進位

這時候?qū)次慌c之后的結(jié)果和按位異或相加,就是我們的答案了
但是題目要求不能使用加減
? ? a.再將按位與的結(jié)果0 1 0與 按位異或結(jié)果0 0 0進行按位與
? ? b.得到0 0 0,代表無需進位
????c.這時候?qū)? 1 0與0 0 0進行按位異或,即得出相加后的結(jié)果0 1 0
這個例子比較簡單,我們可以再用復(fù)雜一點的例子再證明它的可行性
3:0011和5:0101

根據(jù)這個思路,我們成功地完成了3和5的相加
代碼實現(xiàn)
本題是接口型題目,我們只需要完成一個函數(shù),實現(xiàn)相加的功能

不過我們可以自己寫一個主函數(shù)來測試它的可行性
如圖,函數(shù)正確算出了兩個數(shù)的和

如果這篇博客幫到了你,還請點個贊啦~
-----------------------------------
為了幫助大家,輕松,高效學(xué)習(xí)C語言/C++,給大家分享我收集的資源,從最零基礎(chǔ)開始的,幫助大家在學(xué)習(xí)C語言的道路上披荊斬棘!
微信公眾號:C語言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!大家也要把握住有限的時光,抓住成長的每一次機會哦~
編程學(xué)習(xí)書籍分享:

粉絲編程交流:
