首頁  >  文章  >  機器數是原碼還是補碼

機器數是原碼還是補碼

青灯夜游
青灯夜游原創
2022-11-18 14:22:4616745瀏覽

機器數既是原碼,也是補碼。在計算機中表示的帶符號的二進制數稱為機器數,機器數包含原碼、反碼和補碼三種表示形式。原碼就是加了一位符號位的二進制數,正數符號位為0,負數符號位為1,符號位為最高位;正數的反碼就是其原碼,負數的反碼則是符號位不變,其他位元取反;正數的補碼就是其原碼,負數的補碼則是反碼1。

機器數是原碼還是補碼

本教學操作環境:windows7系統、Dell G3電腦。

1.機器數


透過了解機器數後發現:機器數包含了“源碼”,“反碼”,“補碼”的表示形式;

因為機器數指的是一個數在計算機裡以二進位表示的形式,機器數的首位是符號位,正數的符號位為“0”,負數的符號位為“1”。

例如:5 的機器數是:00000101

          -5的機器數為:10000101 (以8位元二進位為例)

# 而「源碼」,「反向碼」,「反位元」碼”,“補碼”具有相同的表示形式,接下來會具體介紹它們的關係。

2.真值


真值指的是帶有符號位元的機器數對應的真實數值。

對於真值而言,一般用十進位表示,也可以用二進位表示,很少用其他進位表示真值。

例如:10000101 的真值= -0000101 = -5

           00000101 的真值= 0000101 = 5

3.原碼

原碼就是加了一位符號位的二進制數,正數符號位為0,負數符號位為1,符號位為最高位。個人理解就是將真值裡面的" "轉換為0,"-"轉換為1。

原碼的表示形式就是第一位是符號位元加上真值的絕對值。

例如:-000101(真值)= 10000101(原碼)

          00000101(真值)= 00000101(原碼)

因為第一位是符號位,所以原碼在8位二進位的範圍為:

11111111~0111111  即    -127~127

原碼是最容易被大腦理解,計算的表示形式。

4.反碼

正數的補碼反碼是其本身;正數的反碼就是其原碼,負數的反碼則是符號位元不變,其他位元取反(0變1,1變0)負數的反碼是符號位元不變,其餘位元取反。

反碼就是在原碼的基礎上,如果是正數,就和原碼一樣,如果是負數,首位符號不變,其餘數值取反。

例如:00000101(原碼)=  00000101(反碼)

          10000101(原碼)=

          10000101(原碼)=#  11111010 (反碼)

##111111010 (反碼)

##11通常被轉換成原碼後計算。

5.補碼

補碼是在原碼的基礎上,如果是正數,就和原碼一樣,如果是負數,除首位符號外,其餘數值取反(反碼),在它的基礎上1。

例如:00000101(原碼)=  00000101(反碼)=  00000101(補碼)

#對於負數, 補碼表示方式也是人腦無法直觀看出其數值的,通常也需要轉換成原碼再計算其數值。

6.使用原碼, 反碼和補碼的歷程



#只使用原碼容易被理解,但是對於計算機而言要辨別首位正負,要消耗大量資源,於是人們尋找到了利用符號位元參與運算的方法。

我們知道, 根據運演算法則減去一個正數等於加上一個負數, 即: 1-1 = 1 (-1) = 0 , 所以機器可以只有加法而沒有減法, 這樣計算機運算的設計就更簡單了。

探索計畫1.0(原碼):

1 (-1) = 0

00000001(原碼) 10000001(原碼)=10000010(原碼)= -2

探索原碼運算首位計畫失敗

追加投資!

探索計畫2.0版本出世(反碼):

00000001(原碼) 10000001(原碼)= 00000001(反碼) 11111110(反碼)= 11110001(反碼)11111110(反碼)= 111111111(反碼) 10000000(原碼)= -0

更新說明:解決了首位符號參與運算的問題,很大程度上減少計算機對二進制運算所消耗的資源,但是出現“0”和“-0”重複的情況,還可以改進!

探索計畫3.0版本出世(補碼):

00000001(原碼) 10000001(原碼)= 00000001(反碼) 11111110(反碼)= 00000001(補碼) (補碼)=00000000(補碼)=00000000(原碼)= 0

追加:(-1)(-127)= (-128)

10000001(原碼) 11111111(原碼)= 11111110(反碼) 10000000(反碼)= 11111111(補碼) 10000001(補碼)=10000000(補碼)=-10000001(補碼)=10000000(補碼)=-10000001(補碼)=10000000(的一個無意義的二進制“-0”,對二進制範圍進一步擴大由1.0版本的(-127~127)升級為(-128~127)同理也可以用於其他位的二進制

例如:int有4個位元組32位,表示的範圍為(-2^31~2^31-1)

由於3.0版本更符合環保理念,所以作為計算機儲存二進制的不二之選。

更多相關知識,請造訪

常見問題欄位!

以上是機器數是原碼還是補碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn