1. 程式人生 > >第二章 資訊處理表示(2.1-ing)

第二章 資訊處理表示(2.1-ing)

2.1資訊儲存

大多數計算機使用8位的塊,或者位元組,作為最小的可定址單位。機器級程式將記憶體視為一個非常大的位元組陣列,稱為虛擬記憶體。記憶體的每個位元組都由一個唯一的數字來標識,稱為它的地址,所有可能地址的集合就稱為虛擬地址空間。(C語言中一個指標的值都是某個儲存塊的第一個位元組的虛擬地址)。

2.1.1十六進位制表示法

☆一個位元組由8位組成。在二進位制中,值域為000000002 —111111112。如果看成十進位制整數,它的值域就是010—25510。十六進位制(簡寫為“hex")使用數字0—9以及字元A—F來表示16個可能的值,值域為0016—FF16

☆C語言中,以0x或以0X開頭的數字常量被認為是十六進位制的值。字元A—F既可以是大寫也可以是小寫,甚至是大小寫混寫。

☆二進位制和十六進位制的轉換可以通過二進位制每4位為一組與十六進位制對應轉換。在這裡插入圖片描述

☆練習題(答案在章末): 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述

2.1.2字資料大小

☆計算機都有一個字長,指明指標資料的標稱大小。字長決定的最重要的系統引數就是虛擬地址空間的最大大小。也就是說,對於一個字長為x位的機器而言,虛擬地址的範圍為0~2x-1,程式最多訪問2x位元組。(目前常見機器為64位字長,32位字長的限制虛擬地址空間為4GB,64位字長則為16EB【1EB=1024PB 1PB=1024TB】)

☆大多數64位機器可以執行32位機器編譯的程式,這是一種向後相容。“32位程式”和“64位程式”在於編譯時的不同。有些資料型別的確切位元組數依賴於程式時如何被編譯的,如圖是32位和64位程式的典型值:在這裡插入圖片描述

char可以儲存整數值。為了避免由於依賴“典型”大小和不同編譯器設定帶來的奇怪行為,ISO C99引入了一類資料型別,其資料大小是固定的,不隨編譯器和機器設定而變化。其中就有資料型別int32_t和int64_t,它們分別為4個位元組和8個位元組。使用確定大小的資料型別是程式設計師準確控制資料表示的最佳途徑。

☆大部分資料型別都編碼為有符號豎直,除非有字首關鍵字unsigned或對確定大小的資料型別使用了特定的無符號宣告。大多數編譯器和機器將資料型別char視為有符號數,但C標準並未保證這一點。使用有符號數值(可以表示負數、零和整數)應當宣告保證。對關鍵字順序以及包括還是省略可選關鍵字來說,C語言允許存在多種形式。如圖宣告都為一個含義:在這裡插入圖片描述

☆程式設計師應該力圖使他們的程式在不同機器和編譯器上可移植。可移植性的一個方面就是使程式對不同資料型別的確切大小不敏感。C語言標準對不同資料型別的數字範圍設定了下界,卻無上界。舉例:宣告一個int型別的程式物件能被用來儲存一個指標,這在大多數32位的機器上可以正常工作,但在一臺64位的機器上可能導致問題。