1. 程式人生 > >《深入理解計算機系統》筆記——資訊的表示和處理

《深入理解計算機系統》筆記——資訊的表示和處理

  1. 資訊的儲存
  2. 十六進位制表示法
  3. 資料大小
  4. 定址和位元組順序
  5. 資料型別
  6. 字串的表示
  7. 程式碼的表示

資訊的儲存

資訊是客觀事物的反映,是經過處理加工後得出的資料
資料是客觀事物的記錄。
計算機內所有的資訊均以二進位制的形式表示,也就是由值0和值1組成的序列。
大多數計算機使用8的塊(位元組),來作為最小的可定址的儲存器單位,而不是在儲存器中訪問單獨的位。

("位(bit)“是電子計算機中最小的資料單位,每一位的狀態只能是0或1。8個二進位制位構成1個"位元組(Byte)”)

也就是說,我們訪問計算機最小的單位是八個位構成的位元組,而不是值0或值1的單個位。


程式會將儲存器視為一個非常大的位元組陣列,稱為虛擬儲存器(virtual memory)。儲存器的每一個位元組都由唯一的數字來標識,也就是我們說的地址(address),所有可能地址的集合稱為虛擬地址空間(virtual address space)

十六進位制表示法

在二進位制表示法中,它的值域為 00000000——11111111;
如果用十進位制表示就是0——255。
但二進位制表示法太冗長,而十進位制表示法與位模式的互相轉化又比較麻煩對於用來表示計算機的位模式來說都不是很方便。

位模式: 計算機中所有二進位制的0、1程式碼所組成的數字串

這時候 十六進位制數產生了,十六進位制使用數字‘0’~ ‘9’,以及字元 ‘A’~ 'F’來對應表示‘10’~‘15’。一般是 0x 或者 0X 開頭。逢16進1。

比如十進位制數 175,我們用十六進位制表示為 0xAF。

計算機進行資料處理時,一次存取、加工和傳送的資料長度稱為(word),一個字通常由一個或多個(一般是位元組的整數位)位元組構成,字的位數叫做字長(word size),每臺計算機都有一個字長,用來指明整數和指標資料的標稱大小(nominal size)。

一個或多個位元組組成一個

字長是CPU的主要技術指標之一,指的是CPU一次能並行處理的二進位制位數,字長總是8的整數倍,PC機的字長為16位(早期),32位,64位。

檢視處理器位數方法: 開啟命令提示符,然後輸入 systeminfo,可以看到處理器的位數是 64 位

資料大小

在這裡插入圖片描述
在程式設計時,考慮到系統的移植性,要注意不同位數下的資料型別的位元組數差異。

定址和位元組順序

對於跨越多個位元組的程式物件(程式物件指令、資料或者控制資訊等)來說,我們需要制定兩個規則:

1、這個物件的地址是什麼

2、在儲存器中如何排列這些位元組
而在幾乎所有的機器上,多位元組物件都被儲存為連續的位元組序列,物件的地址為所使用位元組中最小的地址。
他們都遵循兩個排列規則:
小端法:從最低有效位元組到最高有效位元組的順序儲存物件(最低有效位元組在最前面)

大端法:和小端法相反。
在這裡插入圖片描述

可以看到,資料的儲存是連續的,如"0x100"~“0x103”。

但由於排列位元組的方式有兩種,那麼這就產生問題:當小端法機器產生的資料被髮送到大端法機器或者反方向傳送的時,接收程式裡的位元組成了反序。
因此網路應用程式的程式碼編寫必須遵循已建立的位元組順序的規則,以確保傳送方和接收方都是遵循統一的網路標準防止資料錯誤。

資料型別

資料型別的出現是為了把資料分成所需記憶體大小不同的資料。程式設計的時候對於不同情況定義不同資料型別,然後編譯器需要申請記憶體(申請記憶體根據資料型別或大或小)。
那麼根據上面的定址和位元組順序,計算機在解釋一個數據型別的值時主要有四個因素:
位排列規則(大端或者小端)、起始位置、資料型別的位元組數、資料型別的解釋方式。
對於特定的系統,前兩種因素都是特定的;
而對於後兩種因素(資料型別的位元組數、資料型別的解釋方式),會改變一個數據型別的值的最終結果,這就是強制型別轉換

字串的表示

在計算機中,對非數值的文字和其他符號進行處理時,要對文字和符號進行數字化,即用二進位制編碼來表示文字和符號。
常見的西文字元最常用到的編碼方案有ASCII編碼。

字元 ‘a’ 的 ASCII 碼十進位制值為 97,在計算機中用二進位制表示就是 01100001

程式碼的表示

程式其實就是一個二進位制序列的簡單描述,編譯器會幫我們將其翻譯成對應的機器所認識的二進位制序列。

hello.c到hello.i到hello.o的轉變
前處理器cpp->編譯器ccl->彙編器as、