日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

补码到底是个什么东西

發布時間:2024/8/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 补码到底是个什么东西 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

先引入一個前提,在計算機中數字是以二進制進行存儲的,也就是我們看到的2,在計算機中存儲的是10。我們進行的加法運算 2+1=3 在計算機中是這樣的(這里先假設計算機存儲的是4位二進制數字) 0010+0001=0011

很容以看的出來,4為二進制數能表示的最大數字是1111,就像兩位十進制數表示的最大數字是99一樣。那如果在進行加法運算時,結果超出存儲的容量怎么辦?比如:9+9=18 二進制表示為:1001+1001=10010,但是,因為只能存儲4位數的原因,最高位丟了,結果變成了 0010,也就是2,這時是發生了溢出的。在做運算時要避免數值發生溢出(當然,現在計算機存儲的數字為64位,日常使用完全不用擔心)

運算不光有加法,還有減乘除。乘法就是多次加法,除法就是多次減法。那么減法如何實現呢?在剛開始的時候,計算機只能進行加法運算,這時一部分人想辦法讓其能夠直接進行減法計算,而另一部分人想通過加法來實現減法,最終后者先給出了解決方案。(只是我臆想的情景)

通過加法來實現減法

還記得上面提到的,四位二進制數表示的最大數字為15,當發生溢出時:

16=>二進制:10000 => 0

17=>二進制:10001 => 1

顯然,去掉最高位等于減去16

那么能不能利用加法溢出來實現減法呢?下面簡單推倒一下:

9-2=7 若要實現 9+x=7 那么利用溢出的原理,就要實現 9+x=7+16=23 簡單的解一下方程 x=23-9=14 , 很好,來驗證一下:

9+14 的二進制表示為:1001+1110=10111 最高位溢出,結果為:0111 也就是7,完美。

下面問題來了:如何將上邊的2轉成14呢?也就是講二進制的0010轉成1110。他們有什么關系呢?

偉大的數學科學家前輩們總結出了規律。并發明了反碼和補碼的概念。補碼就是上面轉換后的14。

原碼=>按位取反=>反碼

反碼=>加1=>補碼

雖然不知道這個規律是如何找出來的,但經過無數次驗證,確實是這樣。

引入負數

當引入了負數的概念時,為了表示正負,規定第一位為符號位(0為正,1為負),因為引入符號位,原來的4位數,能表示的最大值也變成了0111。

因為負數的引入,現在所有的減法都可以當做加法來實現了,9-2=9+(-2),或者說9+(-2)=9-2。計算仍然是通過補碼來實現。

負數的補碼為:符號位不變按位取反,再加1

正數的補碼為:它本身

負數的補碼很好理解,就是上面總結的規律,利用加法來實現減法。正數的補碼為啥是它本身呢?你看剛才分析的減法,只有被減數進行了轉換,減數沒變吧。很好理解。其實也是為了可以統一進行處理,引入補碼后,正負數可以使用一套加減法規則進行計算。

簡單實驗一下:

2+(-4)=-2

-4 => 二進制表示:1100 => 補碼:1100

2 => 二進制表示:0010 => 補碼:0010

1100+0010=1110(補碼)

將計算結果再轉成原碼 1010,-2沒毛病

然后,有一個尷尬的問題,正數的0為: 0000,負數的0為:1000,同一個數字,但是換成補碼后,你會發現是同一個數字: 0000。


總結一下:利用補碼計算,就是通過加法來實現減法運算,是利用了計算機存儲位數有限,超出發生溢出并丟失最高位的特性。

不知道補碼是哪位偉大的科學家發明的,前人栽樹后人乘涼,膜拜。

總結

以上是生活随笔為你收集整理的补码到底是个什么东西的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。