軟體設計師考試筆記一:原碼、反碼、補碼及移碼

來源:互聯網
上載者:User

軟體設計師,簡稱軟設,以下文章是我準備軟體設計師考試時的一些筆記,主要是在複習這本厚厚的《軟體設計師教程》中遇到比較疑難問題的記錄。

目錄

一、原碼、反碼、補碼及移碼

二、磁碟儲存空間結構

講在概念之前

在理解這四個名詞前,一定要瞭解一些基礎知識:數值在電腦中以是機器數的形式表示的,它使用二進位計數制。為什麼使用二進位呢,因為電腦只認識0和1,當然原因是因為電子管使用高低電流脈衝來去表示1和0,這樣CPU中數以萬計的晶體管就會通過複雜的電路來去運算各種複雜的運算。

機器數分為無符號數和帶符號數,帶符號數又分為純整數和純小數,如1234.04、3.14是純整數,0.01是純小數。對於帶符號數,機器數最高位用來表示正、負符號位,其中0表正號,1表示負號。

為什麼要使用原碼、反碼等進行運算,如何你之前有電子電路的基礎,相信教材上一定講過,簡單一點的講解可以參考為什麼要使用原碼、反碼、補碼。

另外需要瞭解機器字長的概念,機器字長是指電腦能進行多少位的二進位的並行運算。也就是該電腦運算器一次最多能進行多少位的運算,機器字長越長,運算精度越高。而一般作業系統位元就是針對機器字長進行設計的,比如windows的32位作業系統和64位作業系統。32位的機器字長,可以認為CPU那部分的馬路是32車道的,又由於還有CPU到記憶體的馬路(前端匯流排),以及記憶體那段馬路的(主儲存空間字長),還有記憶體到外設晶片(北橋南橋)這段馬路的(外部匯流排)。

這裡還要再補充一下十進位小數轉化為二進位小數的方法:對十進位小數乘以2得到的整數部分和小數部分,整數部分即是相應的位元碼,再用2乘小數部分,結果再取整數部分,如此反覆,直到小數部分為0或達到精度為止。第一次得到的為最高位,最後一次得到為最低位。

如計算+0.52的二進位:

1、0.52*2=1.04 (取整得到1)

2、0.04*2=0.08 (取整得到0)

3、0.08*2=0.16 (取整得到0)

4、0.16*2=0.32 (取整得到0)

5、0.32*2=0.64 (取整得到0)

6、0.64*2=1.28 (取整得到1)

7、0.28*2=0.56 (取整得到0)

……

如果取機器字長為8情況下,則+0.52的二進位就是01000010;如果是32位的話,那就需要多算一會了

對於小於-1的小數,需要拆分成整數部分和小數部分,整數採用除基數再倒取餘數法。小數如上所述,以-6.25為例:

a、整數部分為6:

1、6/2=3 (取餘數0)

2、3/2=1 (取餘數1)

3、1/2=0  (取餘數為1)

那麼整數6的二進位就是110

b、小數部分為0.25

1、0.25*2=0.5 (取整數0)

2、0.5*2=1.0 (取整數1)

所以小數部分0.25二進位就是01。(這裡是不帶符號位的6.25二進位表示)即:

 

-6.25就是前面加小數位,即:

原碼

定義機器字長為n,若數值X是純整數

若數值X是純小數,對純小數的原碼計算是先將其轉換為二進位(必須的~)

例:若機器字長為8,則:

[+1]原=0 0000001         [-1]原=1 0000001     [+7]原=0 0000111   [+127]=0 1111111

[-127]原=1 1111111     [-7]原=1 1111000     [+0.5]原=0♢1000000   [-0.5]原=1♢1000000

對於0來說,其原碼有兩種表示方式:[+0]原=0 0000000,[-0]原=1 00000000

反碼

機器數的反碼可由原碼得到。若機器數為正數,則其反碼與原碼一樣;如果機器數為負數,則其反碼是對它的原碼(除符號位外)各位取反而得到的。也可用公式表示,若X是純整數,則:

若X是純小數,則:

例:若機器字長為8,則:

[+1]反=0 0000001   [-1]反=1 1111110    [+7]反=0 0000111   [-7]反=1 1111000   [+127]反=0 1111111     [-127]反=1 0000000

[+0.5]反=0♢1000000   [-0.5]反=1♢0111111

對於0來說,反碼也有兩種表示方式:[+0]反=0 0000000   [-0]反=1 1111111

補碼

機器數的補碼可由原碼得到。若機器數為正數,則其補碼與原碼一樣;如果機器數為負數,則其補碼是對它的原碼(除符號位外)各位取反,再加1而得到的(也就是對其反碼再加1)。也可用公式表示,若X是純整數,則:

若X是純小數,則:

例:若機器字長為8,則:

[+1]補=0 0000001   [-1]補=1 1111111    [+7]補=0 0000111   [-7]補=1 1111001   [+127]補=0 1111111     [-127]補=1 0000001

[+0.5]補=0♢1000000   [-0.5]補=1♢1000000

對於0來說,補碼有唯一的表示方式:[+0]補=0 0000000   [-0]補=0 0000000

移碼

機器數的移碼是在數X上增加一個位移量來定義的,它常用於表示浮點數中的階碼。移碼和補碼的關係是符號位互為反碼。如果機器字長為n,規定該位移量為2n-1,移碼定義如下:

若X是純整數,[X]移=2n-1+X   (-2n-1≤X<2n-1)

若X是純小數,[X]移=1+X    (-1≤X<1)

例:若機器字長為8,則:

[+1]移=1 0000001   [-1]移=0 1111111    [+7]移=1 0000111   [-7]移=0 1111001   [+127]移=1 1111111     [-127]移=0 0000001

[+0.5]移=1♢1000000   [-0.5]移=0♢1000000

對於0來說,補碼有唯一的表示方式:[+0]移=1 0000000   [-0]移=1 0000000

由於四種資料表示相互之間都存在一定的轉換關係,因為推薦先求其原碼,然後再根據該關係轉換到該碼制。

參考:

軟體設計師教程(第三版),第一章,電腦系統知識,p4~6

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.