計算機中的負數為什麼要用補碼儲存?
計算機中負數使用補碼儲存可以簡化計算機基本運算電路,使加減法都只需要用加法電路實現,用加法取代減法。補碼是負數的最小正同餘數,所以加一個負數和減一個正數都可以用加一個補碼來表示。
本教學操作環境:windows7系統、Dell G3電腦。
1.引子
你知道電腦中以什麼形式儲存整數嗎?是符號位加值位嗎?值位元是按照正常的二進位方式儲存嗎?
如果後兩個問題你都回答是,那就表示當用3位二進位進行儲存、且符號位0表示正1表示負時,1會儲存成001
,-1會儲存成101
。可惜事實不是這樣,計算機中是用補碼的形式而不是剛剛那種看上去很自然的形式存儲整數,補碼雖然也是用符號位加值位來表示,但表示的規則不太一樣:1會存成001
,-1會存成111
。
如果三個問題你都回答對了,你知道計算機中整數以補碼的形式存儲,但你知道為什麼要用這種形式嗎?以及「正數的補碼等於原碼;負數的補碼等於反碼加1,而反碼等於原碼符號位不變,其餘各位取反」這樣的補碼到底意味著什麼? (假設你不知道,請接著往下看吧XD)
先看使用補碼的目的,然後忘掉上面那個補碼定義,跟我從這個目的開始,一步步探索補碼的本質。
目的:為了簡化計算機基本運算電路,使加減法都只需要透過加法電路實現,也就是讓減去一個正數或加上一個負數這樣的運算可以用加上一個正數來代替。於是改變負數儲存的形式,儲存成一種可以直接當成正數來相加的形式,這種形式就是補碼。 (正數不用變,所以接下來的討論中一般略去正數)
2.補碼是怎麼把減法變成加法的?
2.1.用時鐘理解減法變加法
這是一個身邊的例子,當你校對時鐘的時候,假設發現鐘是6點,但實際上現在才2點,也就是它走快了4個小時,你可以有兩種方法進行校正,一種是逆時針撥回4個小時到2點,另一種是順時針撥6小時到12點再撥2小時,也就是順時針撥8小時到2點。所以對於時鐘的錶盤來說,設-N
表示逆時針撥N個小時,N
表示順時針撥動N個小時,那麼-4 = 8
,同樣還會有 -1 = 11
、-5 = 7
,甚至可以 -4 = 8 = 20 = 32 = -16
. ..
這裡邊隱藏了什麼規律?其實在數學中,-4、 8、 20、 32、-16
可以歸類為符合某個條件的相同類別數字 —— 對於模12同餘。
中文維基上對於模和同餘的定義是:兩個整數a、b,若它們除以正整數m所得的餘數相等,則稱a、b對於模m同餘。
而在一個可溢出計數系統中,把計數系統容量當作模,那麼所有對此模同餘的數在此計數系統中都會有同樣的表示,而且運算等價。
例如上面範例中的時鐘錶盤就是一個可溢出計數系統,模為12,所以-4、 8、 20、 32、-16
這些對模12同餘的數在時鐘錶盤上的表示法是一樣的,而且對時針做這些操作的結果也是一樣的,都會撥到同樣的位置。
一個n位二進位構成的計數系統,因為會捨棄溢出的高位,所以也是一個可溢出的計數系統,它的模為\(2^n\) 。 (從0數到\(2^n -1\),再多就溢出)
由此可以推理,在一個3位二進位構成的模為8的計數系統中,-2,- 10,6,14
可以用同樣的二進位數來表示,同時減10和加14會得到一樣的結果。
2.2.引出補碼
所以,只要補碼是負數的正同餘數,那麼就能實現加這個正同餘補碼跟加另一個負數是一樣結果的效果。對一個負數來說,有無數個正同餘數滿足條件,為了減少不必要的運算,可以規定補碼就取其中最小的正數。
可能因為透過原碼求 補碼 是一個補模運算,所以它被稱為 補碼 。
注意,這裡的補碼都被我用特殊標識,因為這還不是計算機裡真正的存儲的補碼形式,它應該叫補數,不過相信我,已經很接近了
3.完善補碼
3.1.這種補碼表示還有點問題
透過轉換成補碼,減一個數確實變成加一個數了,看似很不錯,但卻有一個明顯的問題,那就是數本身的符號丟失了。
例如3位元二進制,正常表示0~7
,使用補碼法它能取代-8~-1
的運算,但它不能真正表示- 8~-1
,因為你不知道它到底是正數還是負數。
我們把負數轉換成了一種在運算中更讓電腦喜歡的形式,但它卻失去了自己本身作為數的資訊。
怎麼解決這個問題,可能有人很快就會拍腦袋:那就加一位來表示正負得了。但這樣的話運算時怎麼辦,從第二位開始算麼?那進位去位的時候是不是也需要特別注意一下不要影響到符號位?你會發現這個問題並不是那麼簡單。
3.2.怎麼完善補碼
#不知道大牛怎麼想到的,問題解決得非常完美:
- 在維持補碼特性的前提下 (也就是減數還是照樣變成加一個數)
- 增加正負的表示 (能真正表示
-8~-1
了,只用看符號位是0還是1) - 還能讓運算時不用另外區分符號位,直接把符號位當成值位進行運算,而結果的正負號自然會符合這個正負表示法(也就是符號位的進位和值位的進位都會自然地合理)
而且解決方式真的皮,簡單到出人意料,就是前面你拍腦袋想到的辦法:加上一位來表示正負。
具體做法是:在左側高位增加一個符號位,這個符號位連同前面我們推演出的 偽補碼 一同構成真正完善的補碼。
實現的效果:透過讀取符號位能得知數的正負,同時符號位元在加法運算中跟值位元一樣參與運算、進位、退位。
4.最後
總結一下
- #使用補碼的目的:簡化電腦基本運算電路,使加減法都只需要用加法電路來實現,用加法取代減法。
- 補碼為什麼能達到這個目的:n位元二進位可以構成一個可溢出計數系統,在這樣的系統中,把計數系統容量當作模,所有對此模同餘的數在此計數系統中都會有同樣的表示,而且運算等價。而補碼就是負數的最小正同餘數,所以加一個負數和減一個正數都可以用加一個補碼來表示。
- 怎麼計算補碼:正數的補碼是它本身;對負數求最小正同餘數(模為值位的容量)放入值位,符號位置為1 ,得到負數的補碼。
想要查閱更多相關文章,請造訪PHP中文網! !
以上是計算機中的負數為什麼要用補碼儲存?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Windows遠端桌面服務允許使用者遠端存取計算機,對於需要遠端工作的人來說非常方便。然而,當使用者無法連線到遠端電腦或遠端桌面無法驗證電腦身分時,會遇到問題。這可能是由網路連線問題或憑證驗證失敗引起的。在這種情況下,使用者可能需要檢查網路連線、確保遠端電腦是線上的,並嘗試重新連線。另外,確保遠端電腦的身份驗證選項已正確配置也是解決問題的關鍵。透過仔細檢查和調整設置,通常可以解決Windows遠端桌面服務中出現的這類問題。由於存在時間或日期差異,遠端桌面無法驗證遠端電腦的身份。請確保您的計算

2024CSRankings全美電腦科學專業排名,剛剛發布了!今年,全美全美CS最佳大學排名中,卡內基美隆大學(CMU)在全美和CS領域均名列前茅,而伊利諾大學香檳分校(UIUC)則連續六年穩定地位於第二。佐治亞理工學院則排名第三。然後,史丹佛大學、聖迭戈加州大學、密西根大學、華盛頓大學並列世界第四。值得注意的是,MIT排名下跌,跌出前五名。 CSRankings是由麻省州立大學阿姆赫斯特分校電腦與資訊科學學院教授EmeryBerger發起的全球院校電腦科學領域排名計畫。該排名是基於客觀的

計算機的「e」是科學計數法符號,字母"e" 在科學計數法中用作指數分隔符,表示"乘以10 的多少次方",在科學計數法中,一個數通常被寫成M × 10^E的形式,其中M 是介於1到10之間的數,而E表示指數。

<p>MSTeams是與隊友和同事交流、聊天或通話的值得信賴的平台。 MSTeams上的錯誤代碼為80090016以及<strong>您的電腦的受信任的平台模組故障</strong>的訊息可能會導致登入困難。在錯誤代碼解決之前,該應用程式將不允許您登入。如果您在開啟MS團隊或任何其他Microsoft應用程式時遇到此類訊息,那麼本文可以引導您解決問題。 </p><h2&

電腦中cu的意思取決於上下文:1、Control Unit,在電腦的中央處理器中,CU是負責協調和控制整個計算過程的元件;2、Compute Unit,在圖形處理器或其他加速處理器中, CU是處理平行計算任務的基本單元。

使用電腦時,作業系統偶爾也會故障。今天遇到的問題是在存取gpedit.msc時,系統提示無法開啟群組原則對象,因為可能缺乏正確的權限。未能開啟這台電腦上的群組原則對象解決方法:1、存取gpedit.msc時,系統提示無法開啟該電腦上的群組原則對象,因為缺乏權限。詳細資訊:系統無法定位指定的路徑。 2、用戶點擊關閉按鈕後,就彈出如下錯誤視窗。 3.立即查看日誌記錄,並結合記錄信息,發現問題出在C:\Windows\System32\GroupPolicy\Machine\registry.pol文件

steam無法連線至遠端電腦的解決方法:1、在遊戲平台中,點選左上角的「steam」選項;2、開啟選單選擇「設定」選項;3、選擇「遠端暢玩」選項;4、勾選啟動「遠端暢玩」功能,然後點選「確定」按鈕即可。

補碼是一種數字表示法,常用於計算機中的二進位數運算。補碼簡化了負數的加法和減法運算,同時能夠表示更廣範圍的整數,補碼的使用在計算機科學中起著重要的作用,對於理解計算機中整數的運算和表示方法非常重要。