1. 程式人生 > >計算機計算乘除法的原理

計算機計算乘除法的原理

前言

  • 雖然我們在程式語言中可以直接使用+-/,但是對某些要求不能用/的情況下,我們有必要了解一下計算機是怎樣完成乘除法的。
  • 首先,我們要明確一下計算機所能完成的最基本操作是:+(-)和左移右移。雖然ISA中一般都有MUL類指令,但是這些經過譯碼之後最終的元操作還是加法和移位指令。

乘法實現

  • 我們知道在計算機中只有0和1,於是,就有了二進位制計數,比如5 = 101. 抽象的說,任何一個數均可以表示為如下式子:
    這裡寫圖片描述
    所以其他數乘以X,就變成了如下式子:
    這裡寫圖片描述
    這就是計算機做乘法的原理。因為對於計算機而言,左移一位代表乘以2,右移一位代表除以2。所以,對於a乘以x而言,只是將a左移x為1的位並累加即可。

舉例說明:5*3

  1. 3=0011(不用分解,計算機就是這麼儲存的)
  2. 3的第0位1,5左移0位仍為0;
  3. 3的第一位為1,5左移1位為5*2 = 10
  4. 然後將其累加,得到最後結果15.

程式碼如下:

//沒有考慮傳入數太大,導致溢位的情況。只做簡單說明
int getBits(int num){
    int numLen = 0;
    while(num){
        numLen++;
        num = num>>1;
    }
    return numLen;
}

int getIndexBit(int num,int pos){//獲取從右到左的第pos
位置的值1/0 int index = 1<<pos; if((num&index)>>pos) return 1; else return 0; } int getBit(int num,int pos){//獲取從右到左的第pos位置的值1/0 pos = pos-1; return getIndexBit(num,pos); } int multi(int multi1,int multi2){ bool minus = false; if(multi2<0){ minus = true; multi2 = -multi2; } int
length = getBits(multi2); int index = 0; int base = multi1; int sum = 0; while(index<length){ int val = getBit(multi2,index+1); if(val) sum+=(base<<index); index++; } if(minus) return -sum; return sum; }

除法實現

除法實現起來要比乘法難一點,因此,讓我們首先從人的角度來計算一下除法的實現。

人類計算除法

當我們在計算51/3=17,拋開9*9乘法表。

  1. 從被除數的最高位5開始,從0-9選一個數,使得5-i*3>=0且使5-(i+1)*3<0。我們選擇了1. 餘數為2.
  2. 將餘數*10+1=21,繼續從0-9中選一個數,使得21-3*i>=0且使5-(i+1)*3<0,我們選擇了7.
  3. 由此,我們找到了答案17。

計算機計算除法

計算機計算除法的過程與人類計算的過程很類似,只是選擇範圍變成了0或1.
還以51/3為例說明(51:110011;3:11)

  1. 從第一位開始為1,小於11,結果位置0;餘數為1
  2. 從第二位開始,餘數*2+1=11,等於11,結果位置1,餘數為0;
  3. 從第三、四位開始,餘數*2+0=0<011,結果位置0,餘數為0
  4. 從第5位開始,餘數*2+1=1<11,結果置0,餘數為1
  5. 從第6位開始,餘數*2+1=11=11,結果置1,餘數為0.

此時將結果位相連,恰好是10001(17)

相關推薦

計算機計算乘除原理

前言 雖然我們在程式語言中可以直接使用+-/,但是對某些要求不能用/的情況下,我們有必要了解一下計算機是怎樣完成乘除法的。 首先,我們要明確一下計算機所能完成的最基本操作是:+(-)和左移右移。雖然ISA中一般都有MUL類指令,但是這些經過譯碼之後最終的元操

分享《深度學習與計算機視覺算原理框架應用》《大數據架構詳解從數據獲取到深度學習》PDF數據集

書簽 部分 https log pdf 深入 -s 更多 實用 下載:https://pan.baidu.com/s/12-s95JrHek82tLRk3UQO_w 更多資料分享:http://blog.51cto.com/3215120 《深度學習與計算機視覺 算法原理

PCB 加投率計算實現基本原理--K最近鄰算(KNN)

最近鄰 plist 控制 str 驗收 階段 分享圖片 數據量 出現 PCB行業中,客戶訂購5000pcs,在投料時不會直接投5000pcs,因為實際在生產過程不可避免的造成PCB報廢, 所以在生產前需計劃多投一定比例的板板, 例:訂單 量是5000pcs,加投3%,那就

關於js小數乘除計算不正確的解決方案

方案1 <script>      alert(11*(22.9*10)/10);</script> 解決問題的大概思路就是,先把 因數放大為整數,最後再除以相應的倍數,這樣就能得到正確的結果了。&nb

CSU Problem 1781 階乘除——湖南省第十一屆大學生計算機程式設計競賽

輸入兩個正整數 n, m,輸出 n!/m!,其中階乘定義為 n!= 1*2*3*...*n (n>=1)。 比如,若 n=6, m=3,則 n!/m!=6!/3!=720/6=120。 是不是很簡單?現在讓我們把問題反過來:輸入 k=n!/m!,找到這樣的整數二元組(n,m) (n>m>=

計算機中移位操作和乘除的關係

移位實現的乘除法比直接乘除的效率高很多。 用移位實現乘除法運算   a=a*4;   b=b/4;   可以改為:   a=a<<2;   b=b>>2;   說明:   除2 = 右移1位 乘2 = 左移1位   除4 = 右移2位 乘4 = 左移2位   除8

各種排序算原理

排序數組 images selection election 最小 原理圖 img 縮小 記錄 Insertion:插入排序,每一步都將一個待排數據按其大小插入到已經排序的數據中的適當位置,直到全部插入完畢。 詳細介紹見:http://www.cnblogs.co

dht算原理描述

xor 算法 沒有 ash 結構 操作 路由算法 路由 查找 dht原理 dht是P2P網絡(結構化P2P)核心路由算法,主要是利用一致性hash,把節點和資源都表示成一個hash值,放入到這個大的hash環中,每個節點負責路由靠近它的資源。 一.重要概念: 1.no

SHA1算原理

其余 取值 意義 重復 比較 adc xe8 還要 記錄 一.SHA1與MD5差異 SHA1對任意長度明文的預處理和MD5的過程是一樣的,即預處理完後的明文長度是512位的整數倍,但是有一點不同,那就是SHA1的原始報文長度不能超過2的64次方,然後SHA1生成160位的報

Canny邊緣檢測算原理及其VC實現詳解(一)

常用 差分 實現圖 還需要 鏈接 傳感器 出了 關系 位置 轉自:http://blog.csdn.net/likezhaobin/article/details/6892176 圖象的邊緣是指圖象局部區域亮度變化顯著的部分,該區域的灰度剖面一般可以看作是一個階躍,既從

線性規劃算原理介紹

算法 線性規劃 線性規劃定義:求滿足約束的最優目標,目標是變量的線性函數,約束是變量的相等或不等表達式。單純形算法1 松弛變量 為將不等式轉化為等式添加的非負變量 比如 將f(xi) >0 變成 xj= f(xi) ,那麽xj就是松弛變量主元操作(pivot)1 任意在目標函數中系數為正的基本變

三維空間兩直線/線段最短距離、線段計算 【轉】

發布 2.3 main position overflow 解析 get fix 三維 https://segmentfault.com/a/1190000006111226 d(ls,lt)=|sj−tj|=|s0−t0+(be

交換機鏈路聚合技術之負載均衡算原理

交換機 負載均衡 HASH表介紹: 在交換機內部,每創建一個聚合組時,底層同時創建對應該聚合組的一個hash表,該表存在於交換芯片上,詳情見互聯網相關文章。交換機負載均衡轉發原理:雖然底層有了一張HASH表,那麽到底是怎麽利用這張表的呢?1)工程師設定端口成員與HASH算法,如SIP、DIP、SI

PS 濾鏡算原理——碎片效果

net -a dsm 原理 -o span offset gravity == %%% Fragment %%% 對原圖做四個方向的平移。然後對平移的結果取平均 %%% 碎片效果 clc; clear all; Image=imread(‘4.jpg‘

計算機進位制原理

bsp spa 詳細 view 進位制 tps aid 二進制 com 生活中的數字都以10進制為準 1)假定二進制、八進制、十六進制 -----> 十進制 (即 乘加 計算) 2)假定十進制 -----> 二進制、八進制、十六進

八大排序算原理以及Java實現(直接插入排序)

不能 oat 設立 side 堆排 八大排序 算法 line load 概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。 我們這裏說說八大排序就是內部排序。

MD5加密算原理(含代碼)以及SHA算相關信息

核心 但是 加密 不支持 .com about tran temp get 轉載: http://blog.csdn.net/forgotaboutgirl/article/details/7258109 java代碼部分 親測通過。 這裏 就 只貼一下代碼吧 。 動作只有

Paxos發展、算原理

hub 決定 特性 惡意攻擊 tor img 如果 ava 一個 Paxos 發展史   Leslie Lamport所提出的Paxos算法是現代分布式系統中的一項重要的基礎性技術,得到廣泛的應用。 Paxos的整個發展過程大概可以分為三個階段:   第一階段:萌芽期

Apriori 關聯分析算原理分析與代碼實現

muc items blog 具體實現 itblog run 任務 name subset 轉自穆晨 閱讀目錄 前言 關聯分析領域的一些概念 Apriori算法基本原理 頻繁項集檢索實現思路與實現代碼 關聯規則學習實現思路與實現代碼 小結 回到頂部 前言

K-Means 聚類算原理分析與代碼實現

oat 得到 ssi targe fan readline txt __name__ 輸出 轉自穆晨 閱讀目錄 前言 現實中的聚類分析問題 - 總統大選 K-Means 聚類算法 K-Means性能優化 二分K-Means算法 小結 回到頂部 前言 在