深入理解計算機系統系列(第二章--資訊的表示與處理)

HowieLee59發表於2019-01-24

說實話第二章的浮點數的部分數學公式真多,看起來感覺好枯燥,不過還是要堅持 

1.大多數計算機使用8位的塊,或者位元組,作為最小的可定址的記憶體單位,而不是訪問記憶體中單獨的位。機器級程式將記憶體視為一個很大的位元組陣列,稱為虛擬記憶體。記憶體中的每一個位元組都由一個唯一的數字來標識,稱為他的地址,所有可能地址的集合就稱為虛擬地址空間。

2.基本C資料型別的典型大小

3.字長指明整數和指標資料的大小。字長決定的最衝要的系統引數是虛擬地址空間的最大大小。

4.Android和IOS只能用於小端模式,二用於許多電話的ARM微處理器可以用大端和小端兩種方式。

5.二進位制程式碼很少能在不同機器和作業系統組合之間移植(不同的機器型別使用不同的且不相容的指令和編碼方式,即使是完全一樣的程式,執行在不同的作業系統上也會有不同的編碼規則)。

6.Java程式語言使用Unicode來表示字串。對於C語言也有支援Unicode的程式庫。

7.C語言中||,&&,!均為邏輯運算子,只能表示0和1

8.移位運算分為邏輯移位和算術移位(幾乎所有的編譯器/機器組合都對有符號數使用算術右移,且許多程式設計師也都假設機器會使用這種右移。另一方面,對於無符號數,右移必須是邏輯的)

9.C和C++都支援有符號(預設)和無符號數。Java只支援有符號數(有符號數運算的時候先轉換為原碼後計算,然後轉換為機器識別的補碼;對於無符號的右移運算必然為邏輯的)

10.在Java中,單位元組資料型別稱為byte,而不是char。這些非常具體的要求都是為了保證無論在什麼機器上執行,Java程式都能表現的完全一樣。

11.浮點數取反就是簡單的對它的符號位取反。

12.從int轉化為float數字不會溢位,但是可能會被舍入。

13.在相同長度的無符號和有符號整數之間進行強制型別轉換的時候,大多數的C語言實現遵循的原則是底層的位模式不變。

相關文章