軟體設計師,簡稱軟設,以下文章是我準備軟體設計師考試時的一些筆記,主要是在複習這本厚厚的《軟體設計師教程》中遇到比較疑難問題的記錄。
目錄
一、原碼、反碼、補碼及移碼
二、磁碟儲存空間結構
講在概念之前
在理解這四個名詞前,一定要瞭解一些基礎知識:數值在電腦中以是機器數的形式表示的,它使用二進位計數制。為什麼使用二進位呢,因為電腦只認識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