程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 一道關於計算機如何做加法的面試題

一道關於計算機如何做加法的面試題

編輯:關於C語言

   題目:實現int add(int a, int b)方法,實現a和b的和,但是內部不允許使用+-*/等算術運算。

解答:這個題考查的其實是對計算機硬件如何做加法的。計算機內做加法和乘法都是模擬人做加法和乘法的方法來設計和實現cpu算術運算模塊的。這在我們學習計算機組成原理的課程時應該學到過。如下面例子:

1101

  11

+

--------------

10000

這個計算可以分為兩部分,一部分是按位+的過程,另一部分是進位的過程。按位+,其實就是異或運算了,1+1=0,進1位,0+1=1+0=1,0+0=0那進位如何計算呢?在什麼情況下進位,1+1的時候才進位,你應該馬上能想到與運算。進的那一位加到高位繼續參加下一步的運算。那麼我們可以得到如下公式:

a+b=a^b+(a&b)<<1

那這裡還用到了加法,沒法解決我們的問題,但是你不覺得這是一個遞歸嗎?

add(a,b)=add(a^b,(a&b)<<1)

那這個遞歸什麼時候終止呢?顯然,a或b中有一個是0,肯定就可以終止了。

下面是代碼:

int add(int a, int b)
{
    if (!a) return b;
    else
         return add((a & b) << 1, a ^ b);
}


本文出自 “驿落黃昏” 博客,請務必保留此出處http://yiluohuanghun.blog.51cto.com/3407300/1294327

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved