一. 計算機介紹
1.計算機結構組成
馮·諾依曼體系結構馮·諾依曼理論的要點是:數字計算機的數制採用二進制;計算機應該按照程序順序執行。
根據馮·諾依曼體系結構構成的計算機,必須具有如下功能:把需要的程序和數據送至計算機中。必須具有長期記憶程序、數據、中間結果及最終運算結果的能力。能夠完成各種算術、邏輯運算和數據傳送等數據加工處理的能力。能夠根據需要控制程序走向,並能根據指令控制機器的各部件協調操作。能夠按照要求將處理結果輸出給用戶。
將指令和數據同時存放在存儲器中,是馮·諾依曼計算機方案的特點之一 計算機由控制器、運算器、存儲器、輸入設備、輸出設備五部分組成 馮·諾依曼提出的計算機體系結構,奠定了現代計算機的結構理念。
2.計算機系統組成
3.程序和指令
指令是對計算機進行程序控制的最小單位。
所有的指令的集合稱爲計算機的指令系統。
程序是僞完成一項特定任務而用某種語言編寫的一組指令序列。
二.進制
進制就是進位制。比如我們平時使用的是十進制,逢十進一,9+2=11=9+1+1;我們生活中時間計算小時使用的二十四進制,二十四進一,二十四小時過了,就加一天。
1.二進制
計算機底層使用的就是二進制。二進制數據是用0和1兩個數碼來表示的數。它的基數是2,進位規則是“逢二進一”,借位規則是“借一當二”。
數據在計算中主要是以補碼的形式存儲的。
十進制整數轉化二進制的方法:除以2,分別取餘數和商數,商數爲0的時候,將餘數倒着數就是轉化後的結果。
十進制小數轉換成二進制:小數部分和2相乘,取整數,不足1取0,每次相乘都是小數部分,順序看取整後的數就是轉化後的結果。
注意:乘的時候只乘小數部分;0.432只有3位,故只需3位;0.432的二進制爲:0.011。
2.八進制
八進制,Octal,縮寫OCT或O,一種以8爲基數的計數法,採用0,1,2,3,4,5,6,7八個數字,逢八進1。一些編程語言中常常以數字0開始表明該數字是八進制。
八進制二進制相互轉換
八進制一位對應二進制三位
十進制轉換八進制的方法:
用十進制數除以8,分別取餘數和商數,商數爲0的時候,將餘數倒着數就是轉化後的結果。
3.十六進制
十六進制(英文名稱:Hexadecimal),同我們日常生活中的表示法不一樣,它由0-9,A-F組成,字母不區分大小寫。與10進制的對應關係是:0-9對應0-9,A-F對應10-15。
十六進制一位對應二進制四位
十進制轉換十六進制的方法:
用十進制數除以16,分別取餘數和商數,商數爲0的時候,將餘數倒着數就是轉化後的結果。
4.C語言表示相應進制數
十進制 以正常數字1-9開頭,如123
八進制 以數字0開頭,如0123
十六進制 以0x開頭,如0x123
二進制 C語言不能直接書寫二進制數
案例:
int
b
= 0123; //八進制方式賦值,
以數字0開頭
int
c
= 0xABC; //十六進制方式賦值
//如果在printf中輸出一個十進制數那麼用%d,八進制用%o,十六進制是%x
printf("八進制:%o\n",
b); //%o,爲字母o,不是數字
三.計算機內存數值存儲方式(原碼、反碼、補碼)
整數的原碼、反碼、補碼都一樣。
1.原碼
最高位爲符號位,0代表正,爲1代表負,數值部分就是數值本身絕對值的二進制數。
案例:
十進制數 原碼
+15 0000 1111
-15 1000 1111
+ 0 0000 0000
- 0 1000 0000
2.反碼(通常作爲 求補碼 中間過渡)
對於負數,符號位不變,其餘位取反。
3.補碼:在計算機系統中,數值一律使用補碼存儲。
對於負數,其補碼爲它的反碼 +1
補碼求原碼:補碼符號位不動,其他爲求反,最後整個數+1,得到原碼。
案例:
十進制數 原碼
+15 0000 1111(正數原碼、反碼、補碼一樣)
-15 1000 1111
+ 0 0000 0000
- 0 1000 0000
4.補碼的意義
(1) 補碼統一了零的編碼
案例:用8位二進制數分別表示+0 和 -0
用原碼:
+ 0 0000 0000
- 0 1000 0000
用反碼:
+ 0 0000 0000
- 0 1111 1111
用補碼:
+ 0 0000 0000
- 0 10000 0000 (1進位丟失)
所以,補碼統一了零的編碼。
(2) 兩個用補碼錶示的數相加時,如果最高位(符號位)有進位,則進位被捨棄
案例:計算9-6
原碼計算:
補碼計算:
(3)在計算機系統中,數值一律用補碼來存儲,主要原因是:
統一了零的編碼
- 將符號位和其它位統一處理
- 將減法運算轉變爲加法運算
- 兩個用補碼錶示的數相加時,如果最高位(符號位)有進位,則進位被捨棄