標籤:
本文我們要說一說電腦中資訊的表示
一電腦資訊的表示
我們在數學中學習的計算,都是基於十進位的。這種進位,是起源於印度,在12世紀時期流傳到阿拉伯,在阿拉伯進行了改進,然後在13世紀傳播到西方。這就是我們今天最廣泛使用的阿拉伯數字,它包含0~9一共十個符號。
十進位的特點是,有10個不同的記號,遇到10的整倍數進位。
在構造儲存和處理資訊的機器時,不適於使用十進位,而適合使用二進位。它通過一些物質的物理特性,如電壓的高或低,通電或者不通電,打孔帶的有孔或者無孔等方式來記錄資訊。
二進位的特點是,有2個不同的記號,遇到2的整倍數進位。
這種簡單的方式,對於工業製造提供了穩定的基礎,現在的工藝,已經可以在一個晶片上整合千萬級甚至億級的電路了。
但是使用電腦所表示的資訊,在進行數學計算時可能並不是那麼精確。
首先電腦的數值計算是有範圍的,超出範圍就可能得到錯誤的結果;
其次電腦的計算是有精度限制的,超出精度就會出現誤差;
最後電腦的計算並不符合某些數學定律。
因此我們要從電腦資訊的儲存入手,理解電腦的資訊儲存特點,以避免出現錯誤的計算。
二資訊儲存
為了電腦資訊表示的方便,還經常使用八進位,十六進位。
十六進位的特點是,有16個不同的記號,遇到16的整倍數進位。
十六進位的符號,除了十進位的0~9之外,還包含,a,b,c,d,e,f等字元。每個字元,對應四位bit,例如十六進位的0Xf,用二進位表示,就是1111。即十進位的15。
我們在安裝windows系統時,要分32位,64位。有些軟體,也分32位,64位。那這個“位”到底是什麼意思呢?
相對於32位技術而言,64位技術的這個位元指的是CPU GPRs(General-Purpose Registers,通用寄存器)的資料寬度為64位,64位指令集就是運行64位元據的指令,也就是說處理器一次可以運行64bit資料。
如果CPU是64位的,但是作業系統是32位的,那CPU的的效能就無法充分發揮出來,最直觀的感覺就是,安裝32位系統比64位系統還慢。當然這還要其他的硬體滿足安裝64位系統的基本要求。
32位和64位的系統,對於我們日常應用來說,32位系統,只能識別大概4G的虛擬位址空間,系統實際上可用記憶體為3.25G。而64位系統,理論上可以支援2的64次方的虛擬位址空間,但目前的系統最大支援128G的記憶體,而目前主流主板,一般支援到32G的記憶體。
這是我工作中用到的一台PC Server的配置。使用的是64位cpu,64位的系統,以及32G的記憶體。
在這裡,我們需明確一個概念,就是機器字長:
32位系統,一個機器字長度是32bit;
64位系統,一個機器字長度是64bit。
對於C語言而言,每種資料都有其特定的類型,但資料本身都是由0,1組成的bit序列,那類型是怎麼區分出來的呢?
其實不同的資料類型,除了上下文之外,只在長度上有區分。
下面列表列出了,C常見數實值型別佔用幾個字元
C聲明 |
32位系統(字元) |
64位系統(字元) |
Char |
1 |
1 |
Short int |
2 |
2 |
Int |
4 |
4 |
Long int |
4 |
8 |
Char* |
4 |
8 |
Float |
4 |
4 |
double |
8 |
8 |
注意指標類型,無論指向的是什麼具體類型,都佔一個機器字長。
對於超過1個字元長度的資料類型,機器在實際儲存的時候,有兩種方式:
一種是小端法,一種是大端法。
所謂小端法,就是指這個資料的最低記憶體位置儲存的是低有效位。
而大端法,就是表示這個資料的最低記憶體位置儲存的是高有效位。
如果我們想讓電腦儲存一個字串,需要對資料進行編碼。編碼的方式,最常用的,是用於表示英語字元的ASCII編碼,
此外,還有一種比較通用的編碼,就是Unicode編碼。它的每個字元佔16bit,即2個位元組。它可以表示除英語之外很多國家的語言字元。
Java和.NET都是採用的這種字元集來編碼的。
以前我們說過關於hello world程式的二進位表示。其實對於不同的機器,其二進位也是不同的,而且無法相容。
因此如果想用一種語言進行程式編寫,然後在不同架構不同系統的電腦上運行,就需要進行特殊處理。例如Java的JVM,就是可以將Java代碼根據不同的機器架構編譯成對應的機器代碼序列。從而實現Java的“一次編譯,到處運行”的跨平台性。
說完了數值和字元,下面說一說關於二進位的數學特性。
電腦儲存資料是使用二進位,它與數學中的“布爾代數”非常相似。在布爾代數中,只有2個值:true或false。而電腦語言中,一般都包含一種稱為Bool的資料類型。研究這種資料類型,對於我們學習電腦的儲存和運算是有協助的。
列出bool類型的一些數學特點。
在C語言中,對於資料可以進行如下三種布爾運算:
1按位布爾運算。
2邏輯運算與短路邏輯運算。
3移位元運算:左位移運算,邏輯右位移運算,算術右位移運算。
這些運算在現在進階電腦語言中基本都有,其基本規則與C語言都基本是一致的。
三總結
本節主要講了電腦的資訊儲存的形式,以及一些基本的運算特性。
電腦將資訊編碼為bit位的序列。有不同的編碼方式用來表示整數,實數和字串。不同架構的電腦在編碼數字和多位元組資料時所產生的bit序列是不同的。
布爾運算是電腦中的重要運算方式。
電腦系統的概念(2)