C語言基礎一之預備知識(計算機結構組成、計算機系統組成、進制、原碼反碼補碼)

一. 計算機介紹

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語言不能直接書寫二進制數

案例:
#include <stdio.h>
int main()
{
       int a = 123;           //十進制方式賦值
       int b = 0123;        //八進制方式賦值, 以數字0開頭
       int c = 0xABC;     //十六進制方式賦值
       //如果在printf中輸出一個十進制數那麼用%d,八進制用%o,十六進制是%x
       printf("十進制:%d\n",a );
       printf("八進制:%o\n", b);      //%o,爲字母o,不是數字
       printf("十六進制:%x\n", c);
       return 0;
}



三.計算機內存數值存儲方式(原碼、反碼、補碼)

整數的原碼、反碼、補碼都一樣。

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)在計算機系統中,數值一律用補碼來存儲,主要原因是:
統一了零的編碼
  • 將符號位和其它位統一處理
  • 將減法運算轉變爲加法運算
  • 兩個用補碼錶示的數相加時,如果最高位(符號位)有進位,則進位被捨棄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章