天天看點

《Java 7程式設計入門經典》一1.1 計算基礎

考慮到你正在修一門程式設計課程,你可能已經對計算科學的基礎知識有了一定的了解。但是,不是所有人都有同樣的知識,或某些知識可能是不準确的。為此,在介紹java語言之前,先介紹計算科學中的一些核心概念。在這個過程中,本章會定義一些關鍵術語。

由于計算機最終會運作編寫的程式,是以了解計算機各部分運作的基本方式是有幫助的。任意一台計算機都由一系列的部件組成,它們協同運作,形成一個計算機整體。盡管計算機組成的部件随着時間推移不斷演進,但是計算機仍有許多共同的關鍵特性。例如,一個台式計算機包含的基本元素在智能手機中也能找到。

為了有效工作,一台計算機至少包括要有以下組成部分:

中央處理器(cpu)

記憶體

輸入/輸出裝置

下面逐一進行介紹。

cpu提供了計算機基本的計算能力。它通過執行組成程式的指令實作計算。所有的cpu都能識别某一種特定的指令集(instruction set)。指令集定義了cpu能夠執行的操作種類。例如,許多cpu支援的指令有:基本算術運算、從記憶體中載入和存儲資料、進行邏輯比較、改變程式流等。另外,為了通路記憶體,許多cpu包括有限數量的寄存器(register),為資料提供快速的短期存儲。

cpu執行的指令稱為機器指令(machine instruction)或機器碼(machine code)。一個機器指令能執行的運算很少。例如,一個指令也許隻能把一個寄存器的值移動到另一個寄存器上,或把一個值從寄存器移動到記憶體中,或對兩個寄存器的值進行比較。一般情況下,一類cpu的指令集與其他類型的cpu的指令集并不相同。是以,為一類cpu設計的指令集通常不能用于另一類cpu上。有時存在一些cpu系列,它們保持後向相容性,但無關的cpu的指令集通常不同。

機器指令通常不易于人類閱讀。它們具有為友善計算機使用而編碼的形式。但是,有可能用助記符來表示這些指令,使機器指令适于人類閱讀。這種形式稱為彙編語言(assembly language)。例如,将資料從一個地方移動到另一個地方的指令可以用助記符表示為mov,比較兩個值的指令可以記為cmp。将彙編語言轉換為計算能執行的形式的程式稱為彙程式設計式(assembler)。但是,像java這樣的語言通常是一種更好的選擇,是以當今很少有人編寫彙編語言。

計算機記憶體用于存儲指令和資料,其中指令是用機器指令的形式存儲的。記憶體主要用于在程式執行的過程中儲存資訊。它并不用于長期存儲。計算機中的記憶體是可尋址的(addressable),即cpu可以通過給定位址來通路記憶體中的某一特定位置。記憶體常常又稱為ram,它是随機存儲器(random access memory)的縮寫。

當cpu執行程式時,它先從記憶體中獲得指令,然後執行指令指定的操作。接着,它在獲得下一條指令,執行它,循環往複。在預設情況下,指令從記憶體中順序讀取。但是,有些指令能夠改變執行流,跳轉到一個不同的記憶體區域。

現在,人們使用着各種各樣的輸入/輸出(i/o)裝置,包括鍵盤、顯示器、滑鼠、觸摸屏、語音輸入和聲音輸出等。它們事實上有着同樣的功能,它們使計算機能夠收發資訊。輸入/輸出裝置常常用于使人們能同計算機互動。但是還有一些輸入/輸出裝置是計算機用于與其他裝置通信的,比如儲存設備、網絡擴充卡和像機器人似的控制接口。

除了以上描述的幾種關鍵部件外,許多計算機還有儲存設備,例如硬碟、dvd和閃存。許多計算機還能聯網,連接配接到internet或區域網路。為了使計算機能夠聯網,計算機需要網絡擴充卡。

當今,幾乎沒有人沒聽說過位(bit)、位元組(byte)和二進制(binary)。這些詞彙已經成為人們的日常用語。由于它們是計算領域中非常基礎的概念,是以正規地定義它們非常重要。

1)二進制計數系統

在最底層,計算機使用0和1工作,是以它需要基于0和1的計數系統。這個計數系統稱為二進制計數系統。二進制計數系統就如我們通常使用的十進制計數系統一樣工作,除了每個數位的權重不同。你也許已經知道,在十進制中,每從右往左移動一位,其表示的值的個數總比上一位表示的值的個數大十倍。于是,十進制數基于10的幂次:最右邊的數位表示1的個數,其左邊一位表示10的個數,然後是100的個數,等等。例如,數423表示四百二十三,因為其中有4個100,2個10和3個1。

二進制有着相同的工作原理,隻是每從右往左移動一位,其表示的值的個數增加為上一位的2倍。于是,第一個二進制位(指最右邊的位)表示1的個數,往左一位表示2的個數,然後是4的個數,8的個數,等等。這意味着,一個二進制的前8位表示以下數值:

128 64 32 16 8 4 2 1

例如,二進制數1010就是十進制數10。其原因是,二進制數1010有0個1,1個2,0個4,1個8。是以,0+2+0+8等于10。再來看一個例子:二進制數1101就是十進制數13,因為它有1個1,0個2,1個4和1個8,是以1+0+4+8等于13。正如你所見到的,如果要把二進制數轉化為十進制數,隻需要把1所在的數位表示的值相加即可。

2)位和位元組

在計算機中,位可以用來表示一個二進制數位。一個位可以置位,也可以複位。置位的位是1,複位的位是0。位可以進行分組。一種最常見的形式是位元組。通常認為一個位元組含有8個位。這意味着位元組可以表示0~255之間的數值。

另外,還有一種組織形式稱為字(word)。通常認為,一個字的大小與特定的cpu架構相容。例如,32位計算機上每個字有32位,即4個位元組。

為了友善,二進制數常常每4個一組(有時每8個一組)進行分組,例如:1011 1001。這使得數字更加容易閱讀和了解。但是,這樣的分組對其表示的數值沒有任何影響。

計算機的硬體部件由作業系統(operating system)管理和通路。作業系統是一個控制計算機的主程式。作業系統是計算機科學的核心研究内容之一,在這裡不可能詳細介紹。幸運的是,隻需要一點簡單的概述知識就夠我們使用了。

作業系統主要有兩大功能。首先,它提供底層功能,使其他程式能夠使用計算機的資源。例如,可以通過使用作業系統提供的服務,将資訊儲存在硬碟上。其次,作業系統能夠控制其他程式的運作。例如,它為其他運作的程式提供記憶體空間、為其運作排程cpu時間,監控其資源使用狀況。

有許多常見的作業系統,如:windows、unix、linux、mac os、ios和android。一般來說,程式在設計時必須運作于一個特定的作業系統。例如,以windows為運作平台的程式不能在unix作業系統上運作,除非該程式經過特别的移植。

《Java 7程式設計入門經典》一1.1 計算基礎