首先,既然不能夠用操作符,那我們只能使用位操作來進行。對於位操作有&、|、^、<<、>>這5種操作。那問題是如何能夠用這3種操作來實現兩個資料的相加呢?
在具體操作前,我們先來看看10進製數的相加過程,比如對於「283+969」這個加法操作,一般是從低位往高位進行操作,並且如果兩個數字加起來超過10了,則需要進1。那麼其實這個操作可以分為三步進行:
1.不考慮進為,對每個對應位上的資料直接相加,可以得到「142」;
2.只考慮進製,這千位、百位、十位、個位上的進製分別為「1110」;
3.將第一步和第二步的數字「142」、「1110」重複第1步和第2步,直到所有位數上的進製全部為0為止,這樣就得到最後的結果:「1252」
現在考慮二進位制,同樣可以將二進位制按上述三個步驟進行分解:
1.不考慮進製,
要得到每一位上的和值,可以採用異或(^)操作
2.只考慮進製,
當第i位兩個數均為1時,這第i+1位就需要進1位,因此要得到進製資訊則要採用:與(&) => 左移(<<)
3.將第一步和第二步得到的結果重複進行第1和第2步即可,直到沒有進製資訊,最終的值即為兩個資料的和。
由於**比較簡單,在此略過。
不用除法操作符如何實現兩個正整數的除法?
基礎知識 1 常用的等式 n n 1 n 1 2 獲取整數n的二進位制中最後乙個1 n n 或者n n 1 3 去掉整數n的二進位制中的最後乙個1 n n 1 方法一 根據除法運算的原理進行減法操作,對除法迴圈減被除數,減一次結果加一,直到剛好減為0或餘數小於被除數為止。方法二 遞迴法求解。如果每次...
(筆試題)不用除法操作符,實現兩個正整數的除法
如題所示 假設問題是a除以b 題目要求是正整數,所以考慮的條件不是很多,如果要求是整數的話,即要考慮正負情況的判斷。1 最簡單的就是依次用被除數a減去除數b,並統計減去的次數,即為相除結果 這種方法效率不高,尤其是在被除數a很大,除數b很小的情況下,效率非常低 2 考慮每次相減時,將b翻倍,這樣就可...
不用加減乘除實現兩個正整數的加法
很常見的一道題,網上也有各種各樣的解法,備忘一下。首先來看十進位制整數的加法,123 999,將其分為三步來運算 1 對每一位相加,不考慮進製。當有進製時,捨棄。如下 123 999 012 2 考慮進製的影響。觀察可發現,當個位相加有進製時,實際上少加了10,當百位有進製時,實際上少加了100,依...