導航:首頁 > 源碼編譯 > 20的源碼反碼補碼移碼

20的源碼反碼補碼移碼

發布時間:2023-08-12 16:10:30

❶ 計算機理論:原碼、反碼、補碼與移碼公式記憶方法(個人總結)

  給定一個數,其真值為x,機器字長信余為n,則針對帶符號數:

  針對機器字長為n的帶符號數x,原碼與反碼取值范圍一樣,以下整數均為純整數,小數均為純小數:

  直接看公式可能不容易記住,所以最好是記實例。針對機器字長為8位(即n=8)的帶符號純整數x,其純整數取值范圍是-127 ~ 127,即127= 128-1=2 7 -1=2 (8-1) - 1=2 (n-1) - 1。純小數的取值范滑歲滾圍是-1 ~ 1,因為原碼與反碼有2個0(即-0、+0)所以正負小數都可以等於0
  補碼的取值范圍:

  同樣記實例。針對機器字長為8位(即n=8)的帶符號純整數x,其取值范圍是-128~127,即-128 = -2 7 -(2 8-1 ) = -(2 n-1 ),127= 128-1=2 7 -1=2 (8-1) - 1=2 (n-1) - 1。純小數的取值范圍是-1 ~ 1,但補碼只有1個0(即+0),所以負小數小於0,可以等於-1。
  移碼的取值范圍:

  移碼公式不分正負數。

  針對正數(正整數與正小數),原碼、反碼與補碼的表示是一樣的。
  針對機器字長為n的負數(負整數與負小數):

  記憶方法:(機器字長n=8)
  1、對於原碼負數,符號位取1,即1000 0000。若1000 0000為整數,其值為2 7 =2 n-1 ,若為小數,其值為2 0 ,最後加上|x|即可。
  2、對於反碼負數,符合位取1,數值位取反,即1111 1111,若1111 1111為整數,其值為255=2 n -1,若為小數,其值為2 1 -2 -7 =2-2 -(n-1) ,最後加上x即可。
  3、對於補碼負數,符合位取1,數值位雀嘩取反,再加1,即1 0000 0000,若1 0000 0000為整數,其值為256=2 n ,若為小數,其值為2,最後加上x即可。
  4、對於移碼,其公式與原碼負整數和負小數公式相似,但移碼取x,原碼取|x|。

❷ 二進制的原碼、反碼、補碼、移碼

之前了解一些原碼、反碼、補碼,但是一直有疑問,為什麼會有原碼、反碼、補碼?所以決定研究一下。

計算機中參與運算的數有兩大類:無符號數和有符號數。此篇主要看一下有符號數。在了解原碼、反碼、補碼前需要先了解機器數和真值。

對於有符號數而言,使用「0」表示正,「1」表示負,這種把符號「數字化」的數稱為 機器數 ,也就是一個數在計算機中的二進製表示。

例如:+1100 在機器中表示為 0 1100;-1100 在機器中表示為1 1100

整數的符號位和值用逗號隔開,小數的小數點用點來隔開。
例如:+3轉換成二進制就是00000011,-3就是10000011,這就是機器數。

帶符號位的機器數對應的真正數值就是 真值 。例如:1000 0011的真值是-3,而不是131,它的最高位是符號位。

下面開始說原碼、反碼、補碼。

原碼是機器數中最簡單的一種表示形式,包括符號位和數值位。

原碼: 符號位加上真值的絕對值,即第一位輪陵表示符號位,其餘為表示值。原碼是人腦最容易理解和計算的表示方式。

整數原碼的定義:

小數原碼的定義為:

原碼的問題:
以正負1來說明問題,先來看1+(-1)的計算過程:

1+(-1)=0,但是用原碼來算結果卻是-2,原碼的加法沒有問題,但是減法卻出現了問題。

為了解決原碼做減法時出現的問題,出現了反碼,我們用其他的方式來表示負數,使減法的問題用加法去解決。

補數的思想:
要了解補碼的思想就要知道「模」、「同餘」、「補數」的概念。

在日常生活中,常會遇到「補數」的概念。計算機組成原理(唐朔飛)中舉了一個時鍾的例子,現在是6點鍾,要到達3點鍾的話該怎麼辦呢?我們可以順時針方向將時針移動9小時,或是逆時針移動3小時,我們都可以到達3點鍾,假設順時針轉為正,逆時針轉為負,則有:

鍾表時針轉一圈能代表12個小時,在數學上稱12為模,寫作mod 12,對於mod 12而言,+9和-3互為補數,3和15是同餘關系,記作3≡15 (mod 12),3 + 12 = 15.

其實就相當於沒到12點就丟失,從0點重新開始。

將補數的概念用到計算機中,便出現了補碼這種機器數。

補碼 :正數的反碼是其本身,負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1),這里只是便於計算才這樣說。

對於補碼,相當於是模加上真值,就如同上面的6+(-3),-3就是真值。
整數補碼的定義為:

例如:
當x=+1010時,[x] =0,1010;
當x=-1101時,[x] =2 n+1 + x = 2 5 - 1101 = 100000 - 1101 = 1,0011

小數補碼的猜敏定義為:

小數補碼定義中mod 2的由來:

例如:
當x=+0.0110時,[x] =0.1001;
當x=-0.0110時,[x] =2 + x = 10.0000 - 0.0110 = 1.1010
當x=0時,
[+0.0000] =0.0000;
[-0.0000] =2 + (-0.0000) = 10.0000 - 0.0000 = 0.0000;
顯然[+0] =[-0] =0.0000,即補碼中的「零」只有一種表示形式。

補碼的符號位擴展:
1、補碼的正負小數符號位擴展就是在末尾加0即可,例如:1.1101擴展為1.1101 0000
2、補碼的正數符號位擴展在最高位前面加0即可,例如:0101擴展穗桐枝為0000 0101
3、補碼的負數符號位擴展在最高位前面加1既可以,例如:1010擴展為1111 1010

反碼通常用來作為由原碼求補碼或者由補碼求原碼的中間過渡。
反碼: 正數的反碼是其本身,負數的反碼是在其原碼的基礎上,符號位不變,其餘各個位取反。 這個方法只是利於計算,但是並不代表反碼的真正含義,可以把它忘記

整數反碼的定義為:

小數反碼的定義為:

因為補碼符號位和數值一起編碼,所以很難從補碼上直接判斷出其真值的大小,而用移碼就可以很直觀的看判斷出來。

移碼的定義:

利用移碼的這一特點,當浮點數的階碼用移碼表示時,就能很方便的判斷階碼的大小。

移碼 相當於補碼的符號位取反。

對於補碼來說是存在符號位的,使用移碼就相當於把補碼的負數部分往上移動,使得最小值變為0,而不是負數。

移碼更詳細的用處以後再研究。

寫在最後:

閱讀全文

與20的源碼反碼補碼移碼相關的資料

熱點內容
房本抵押銀行沒有解壓 瀏覽:535
用紙做解壓魔術 瀏覽:484
伺服器中運行的腳本如何測試 瀏覽:373
手機主題包時鍾文件夾 瀏覽:423
怎麼在app上退訂短號業務 瀏覽:978
解壓迫及法老 瀏覽:58
pdf橫豎 瀏覽:137
5800計算機程序和編程 瀏覽:29
網上報修php源碼 瀏覽:897
魔獸宏命令老是語言提示 瀏覽:971
辦公文件夾大全 瀏覽:471
單片機閃爍燈虛擬線路圖 瀏覽:72
App顯示別的國家怎麼更改 瀏覽:154
幻塔官方伺服器叫什麼 瀏覽:196
android自定義進度框 瀏覽:506
linux自動聯網 瀏覽:492
keil編寫的程序怎麼不能編譯呢 瀏覽:562
ipadair2能編程嗎 瀏覽:358
esxi查看內存命令行 瀏覽:79
u盤settings文件夾 瀏覽:650