看片91_日日综合_成人黄色短视频在线观看_91视频 - v11=Av_国产高潮失禁喷水爽到抽搐视频_天天都色视频

電腦怎么用加減乘除法(計算機是怎么懂加減乘除的)

小編:餓狼 更新時間:2022-11-16 13:17
電腦怎么用加減乘除法(計算機是怎么懂加減乘除的)在學習編程的過程中,計算兩個數的和 int a = b + c 這樣的代碼肯定經常寫到,但是計算機到底是怎么計算出來的呢?

加法

說到加法,首先提到的一個概念就是全加器,下圖是一個全加器的數字邏輯電路。

電腦怎么用加減乘除法(計算機是怎么懂加減乘除的)

其中,異或門的輸出 Y = A ^ B ,與非門的輸出就是先與再非,即 Y = !(A & B) 。這里我就不再列真值表了,我們再來看一下上面全加器的邏輯,通過推導可以得到下面公式:

Sum = A ^ B ^ Cin
Cout = (A ^ B & Cin) | (A & B)

這是一位(1 bit)的加法運算,當我們把 8 個全加器級聯起來的話(低位的 Cout 是高位的 Cin )就實現了一個 8 位的加法器。我們可以用代碼模擬一下(LeetCode 371. 兩整數之和):

電腦怎么用加減乘除法(計算機是怎么懂加減乘除的)

說到這里,大家應該大體的了解計算機是怎么計算加法的了,那減法呢?

減法

加法是進位,減法需要考慮的則是借位,是這樣嗎?按我們小時候對加減法學習的經驗是這樣的,但是計算機不是這么處理的。計算機“只有加法”,“沒有減法”??隙ㄓ型瑢W說,不可能,那我們算 int a = b - c 是怎么得出來結果的呢?說到這個首先要了解另外一個概念——補碼。

補碼

我們知道,計算機中對于有符號數,用最高位作為符號位,“0” 代表 “+” ,“1” 代表 “-” ;其余數位用作數值位,代表數值。比如 Byte 類型的取值范圍為 -128 ~ 127。其中,表示數值的只有 7 位,首位表示正負。

怎么推導一個數字的補碼呢?補碼規定,正數和 0 的補碼就是其原碼(原碼、反碼的定義這里就不多贅述),負數的補碼是其正數的原碼取反再加 1 。

聽起來有點繞,舉個例子,求 -10 的補碼:

十進制 10 的原碼(按 8 位舉例)為 0000 1010,其反碼為 1111 0101,取反后再加 1 即為其補碼: 1111 0110。因此,-10 的補碼為 1111 0110。

不知道寫到這里,大家有沒有發現什么端倪?我們再回到減法計算來。

a = b - c
實際上等同于
a = b + ( -c )

我們算一下下面的式子:

12 - 5

= 0000 1100 + 1111 1011

= (1)0000 0111

= 7 括號里為進位,因為只有 8 位,所以高于 8 位的進位要去掉。

7 - 9

= 0000 1111 + 1111 0111

= 1111 1110

= -2

通過這兩個例子是不是就清楚了計算機是如何計算減法的了?

乘法

通過說減法,我們是不是對乘法也有一定的啟發了呢?乘法其實就是循環的加法。比如 5 * 3 實際上就是 5 + 5 + 5。貌似就說完了。實際上不僅僅如此的。現在有一個電子器件叫做乘法器,其可以實現二進制的乘法、除法等運算。我們同樣以 5 * 3 做為例子,講解一下乘法器計算乘法的流程。

5 * 3 = 0000 0101 * 0000 0011

3 的第 0 位為 1 ,那么 5 左移 0 位,結果為 0000 0101 ;
3 的第 1 位為 1 ,那么 5 左移 1 位,結果為 0000 1010 ;
3 的其他高位都為 0 ,因此不再左移;
兩次左移的結果累加,即 0000 0101 + 0000 1010 = 0000 1111 ,即十進制的 15 。

雖然有乘法器,但是我們發現實際的最終操作流程還是加法和位移操作計算的乘法運算。我們寫的代碼中的乘法到底是用乘法器算的還是轉化成加法運算,我們也并不太確定,有些編譯器編譯的時候會對代碼進行優化,會選取最優的一種算法來計算結果。

除法

除法可以通過減法來實現,比如 10 / 3 等價于 10 一直減 3 直到被減數小于 3 ,減了 3 次,那么 10 / 3 的結果就為 3 了,余數為減完剩下的值 1 。

其實上面已經提到了乘法器,除法的原理同樣也類似(這里不說浮點數的除法,只說整數的除法),但是稍微復雜一點。( LeetCode 29. 兩數相除)

同樣我們舉個例子來說明一下。

209 / 5 = 1101 0001 / 0000 0101

首先取 209 的最高位 1 (101 0001) 小于 101
左移一位 11 (01 0001) 小于 101
左移一位 110 (1 0001) 大于 101 ,商 1 ,余 1 (1 0001)
左移一位 11 (0001) 小于 101
左移一位 110 (001) 大于 101 ,商 1 ,余 1 (001)
左移一位 10 (01) 小于 101
左移一位 100 (1) 小于 101
左移一位 1001 大于 101 ,商 1 ,余 100

于是結果為 00101001 (41),余數為 100 (4)。

通過上面我們發現,計算機計算加減乘除,都是轉換為加法和位移運算完成的,而事實上也是如此。可能我們平時編程過程中可能用不到這些內容,直接寫 + - * / 就可以了,但是作為一名程序員,還是有必要了解一下計算機基礎的編碼以及基礎的運算的。祝大家學習愉快!

主站蜘蛛池模板: 国产区视频在线 | 狠狠干2024| 69成人网| 亚洲欧美激情精品一区二区 | 91在线网站 | 欧美 日韩 中文字幕 | 久久久久国产一区二区三区四区 | 青青久久av| 亚洲精品电影网在线观看 | 亚洲国产成人91精品 | 色网站女女 | 久久伊人精品视频 | 国产成人av一区二区三区 | 国产一区二区在线免费观看 | 高清不卡 | 五月综合激情 | 最新国产精品视频 | 黄色片在线 | 久久精选 | 伊人久久免费 | 日韩影院在线 | 在线播放一区二区三区 | 欧美日韩国产精品 | 久久9热 | 日韩视频在线免费观看 | 国产午夜精品一区二区三区四区 | 国产4区 | 亚洲视频在线免费观看 | 国内精品久久久久影院薰衣草 | 精品久久精品久久 | 日韩福利| 91精品久久久久久9s密挑 | 又黄又爽一线毛片免费观看 | av免费看片 | 久久久久高清 | 午夜精品久久久久久久久久久 | 天天人人精品 | 99毛片| 久久免费精品 | 黄网站视频在线观看 | 99re66热这里只有精品8 |