關於計算機如何做加法

2021-06-05 16:38:02 字數 513 閱讀 9499

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

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

110111+

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

10000

這個計算可以分為兩部分,一部分是按位+的過程,另一部分是進製的過程。

按位+,其實就是異或運算了,1+1=0,進1位,0+1=1+0=1,0+0=0

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)

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

題目 實現int add int a,int b 方法,實現a和b的和,但是內部不允許使用 等算術運算。解答 這個題考查的其實是對計算機硬體如何做加法的。計算機內做加法和乘法都是模擬人做加法和乘法的方法來設計和實現cpu算術運算模組的。這在我們學習計算機組成原理的課程時應該學到過。如下面例子 110...

關於如何學習計算機

經過了將近乙個月的大學生活,我基本適應了大學生活,但有乙個讓我不是特別適應的便是大學的學習生活,在大學的生活中,我們的老師真的不是像高中老師一樣一點一,手把手的教學,有些知識點也是一閃而過,只要稍有溜號可能這堂課就聽不懂了。所以,自己最近也在摸索如何學習計算機的相關知識。首先,對於上課溜號問題,其實...

計算機負數加法運算

計算機負數相加 1 1111 1111 2 1111 1110 1111 1101 補碼為0000 0011 以補碼形式 include include int main void unsigned j 10 int i 20 printf ud n i j i j 10000 printf 100...