Chap 3 基本資料型態

Download Report

Transcript Chap 3 基本資料型態

1/62
Chap 1 基本概述
電腦的基本架構和運作方式
C++ 有別於其它程式語言的一些特性
2/61
基本概述








3/62
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
電腦的發明和演進
電腦的基本架構
馮紐曼架構
電腦內部的資料表達方式
軟體
程式語言
C++ 程式語言
程式語言的演進
1.1 電腦的發明和演進
最早的計算機
 十七世紀法國Blaise Pascal在1642年發
明的齒輪式加法計算器。
 英國的Charles Babbage於1830年進一步
開發差分機,以進行多項式的計算。
4/62
電腦的演進
名稱
時間
特徵
第一代電腦
1945~1950
使用真空管
機器語言
1950~1965
電晶體
磁蕊記憶體
Assembler和compiler出現
1965~1975
IC
作業系統出現
迷你電腦
1975~現在
微處理機發明
工作站電腦
超級電腦
第二代電腦
第三代電腦
第四代電腦
5/62
現代計算機構造的起源
在英國Charles Babbage的構想裏,計算機
分為四個部份協調運作:
1. 輸入與輸出單元
2. 處理與計算單元
3. 控制單元
4. 儲存單元
6/62
Intel公司對於電腦科技的三項
重大貢獻



7/62
微處理機 (microprocessor)
DRAM
EPROM (電壓可抹寫式唯讀記憶體,
Electrically Programmable Read-Only
Memory)。
摩爾定律 (Moore's law)

8/62
不管是記憶單元的容量,CPU內的元件
數量,或是CPU的運算速度,都以每一
年半增加一倍的驚人速度快速成長。
電腦的分類






9/62
超級電腦 (supercomputer)
大型電腦 (mainframe)
迷你電腦 (minicomputer)
工作站 (workstation)
微電腦 (microcomputer)
聰明隨身裝置 (smart handhold devices)
數位電腦和類比電腦



10/62
數位式 (digital) 和類比式 (analog)。
在 TTL 的標準裏,0.0 V ~ 0.4 V代表 0,
而2.4 V ~ 5.0 V代表 1;在 EIA 的標準
下,-15 V ~ -3 V 代表 0,而3 V ~ 15 V
代表 1。
「電腦」通常指的是數位式電腦。
電腦的硬體和軟體
11/62

硬體 (hardware): 用來構成電腦系統的組
成部份,具有體積和質量。

軟體 (software): 能在電腦上執行的程式
或是能被電腦取用的資料,不具有體積
或質量。
電腦的架構
可以區分為下列五個主要的部份:
1. CPU (中央處理器,Central Processing
Unit)
2. 主記憶體 (main memory)
3. 儲存裝置 (storage devices)
4. I/O裝置 (輸入/輸出裝置,input-output
devices)
5. 匯流排 (bus)
12/62
電腦基本組成的關聯圖
主記憶體
I/O 裝置
匯流排
CPU
儲存裝置
13/62
CPU(中央處理器)
用來執行從記憶體取得的指令,是電腦的
運算核心。
包括:
 算術/邏輯單元 (arithmetic/logic unit,簡
寫為ALU)
 控制單元 (control unit,簡寫為CU)
 Registers
14/62
主記憶體(main memory)

15/62
唯一能由CPU直接存取資料的大型記憶
裝置,運算時所需要的指令和資料必需
先存放在主記憶體中才能執行。通常由
DRAM (動態隨機存取記憶體,Dynamic
Random Access Memory) 構成。
DRAM
是RAM (Random Access Memory,隨機存取
記憶體) 的一種。
 RAM有DRAM和SRAM (Static Random Access
Memory,靜態隨機存取記憶體) 兩大類。相
較於SRAM,DRAM具有以下的幾個特性:
1. 儲存單元所需的面積較小。
2. 用電較省。
3. 存取速度較慢。
4. 必需不斷地重新記憶(refresh),否則資料會
消失。

16/62
SRAM

CPU
存取速度快,容量較小且價格昂貴的SRAM
經常做為快取記憶體 (cache) 以擔任DRAM與
CPU之間指令和資料的緩衝。
如下圖所示:
Cache
L1 Cache
Cache
L2 Cache
Controller
Cachecach
Controller
Cachecach
e
17/62
e
主記
憶體
儲存裝置(storage device)
18/62

又稱為次記憶體 (secondary memory) 或是輔
助記憶裝置 (auxiliary memory device)。

有FDD、HDD、CD-ROM Drive、CD-R、
CD-RW、DVD-ROM Drive、DVD-R/RW、
DVD+R/+RW、magnetic tape drive、USB隨
身碟,和 Magneto-Optic drive 等數種形式。
唯讀記憶體 (ROM,ReadOnly Memory)

19/62
只能讀取,無法隨時修改內容的記憶體,
常用的是EPROM (Erasable
Programmable Read-Only Memory) 和光
碟 (CD-ROM,DVD-ROM)。
EEPROM (電壓式可抹寫唯讀記憶體,
Electrically Erasable Programmable
Read-Only Memory)
20/62

在沒有電源供應的時候仍然能夠保有內部
儲存資訊。

EPROM需要施加紫外線 (UV) 才能清除原
有資料以備重寫,而EEPROM只要調高其
中一支腳位的電壓即可清除原有資料。
混合式記憶體 (hybrid memory)


21/62
EEPROM和快閃記憶體 (flash memory) 都
是混合式記憶體 (hybrid memory) 的主要
成員,兼具RAM可以多次修改內容,以
及ROM可以在電源供應消失時仍然保有
內部資料特性。
快閃記憶體只能以sector (扇形區段) 為單
位來清除資料,而EEPROM清除資料的
單位是位元組 (byte)。
記憶卡的形式








22/62

Compact Flash Card (CF卡)
Smart Media (SM卡)
Multi Media Card (MMC卡)
xD Picture Card (xD卡)
Secured Digital Card (SD卡)
Reduced MM卡
Sony的Memory Stick (包括衍生的Magic Gate、
Memory Stick Pro,和Memory Stick Duo)
IBM的Micro Drive卡
SanDisk的MiniSD卡。
I/O裝置(輸入/輸出裝置,
input-output device)

23/62
電腦與外界溝通的管道,包括顯示器
(monitor)、鍵盤 (keyboard)、滑鼠、搖桿
(joy stick)、數位板 (digitizer,graphic
tablet)、麥克風、喇叭、掃描機 (scanner)、
印表機、MODEM、網路卡等裝置。
匯流排(bus)


24/62
連接裝置的單元。匯流排所代表的不只是
一些訊號線和控制裝置,還包括讓裝置之
間能夠有效溝通的通訊協訂 (protocol)。
例如ISA (Industry Standard Architecture) 匯
流排的時脈是8 MHz,PCI (Peripheral
Component Interconnect) 匯流排已提昇至66
MHz,達到524 MBps。
橋接器 (bridge)

銜接各種不同時脈的匯流排
L2
Cache
CPU
DMA
控制器
North Bridge
北橋
晶片
Syste
I/O
高速匯流排
I/O
時脈電路
主記憶體
I/O
AGP
m Bus
南橋
晶片
South Bridge
25/62
I/O
低速匯流排
DMA
26/62

直接記憶體存取 (Direct Memory Access)
的資料傳遞模式。

在DMA控制器獲得CPU的授權後,I/O裝
置與記憶體之間,甚至兩個I/O裝置之間
能夠直接傳遞資料。
1.3 馮紐曼架構與哈佛架構
CPU
CPU
Program
Counter
馮紐曼架構
主記憶體
Program
Counter
位址
資料
位址
指令
27/62
資料
記憶體
程式
記憶體
指令週期
1. 擷取 (fetch)
2. 解碼 (decode)
3. 執行 (execute)
解碼
擷取
執行
28/62
程式記數器 (Program Counter)
與主記憶體之間的關係
29/62
各型記憶裝置的階層關係
暫存器
30/62
Cache
主記憶體
硬碟
數字系統





31/62
十進位數字系統 (decimal number system)
二進位數字系統 (binary number system)
八進位數字系統 (octal number system)
十六進位數字系統 (hexadecimal number
system)
十進位數字系統 (decimal number system)
例如,365的值是
36510 = (3×102) + (6×101) + (5×100)
每個數位的位值 (positional value) 都比它
右邊的數位多了10倍,如下圖所示:

365
32/62
5 ×100 =
5
6 ×101 =
60
3 ×102 =
300
共 365
二進位數字系統

以2為基底 (base),它的數位符號只有0和1
兩種。
例如,11012的值是
11012 = (1×23)+(1×22)+(0×21)+(1×20) = 1310
33/62

每個數位都比它右邊的數位多了兩倍,如下
圖所示:
1101

34/62
1 ×20 =
0 ×21 =
1
0
1 ×22 =
1 ×23 =
4
8
共 13
4個二進位數字的組合可以代表從00002到
11112總共16種不同的值。
位元和位元組




35/62
位元(bit)是兩個英文字binary和digit的組
合。
8 bits = 1 byte
一個位元組可以用來表示28,亦即256
種不同的值。
16位元 (2 bytes) 可以有65,536種變化。
八進位(octal)和十六進位
(hexadecimal)數字系統



36/62
32768 = (3×83) + (2×82) + (7×81) + (6×80)
= 172610
6BE16 = (6×162) + (11×161) + (14×160) =
172610
都是代表1726這個數字。
數字系統對應表
37/62
十進位數字
二進位數字
八進位數字
十六進位數字
0
00
0
0
1
01
1
1
2
10
2
2
3
11
3
3
4
100
4
4
5
101
5
5
6
110
6
6
7
111
7
7
8
1000
10
8
9
1001
11
9
10
1010
12
A
11
1011
13
B
12
1100
14
C
13
1101
15
D
14
1110
16
E
15
1111
17
F
16
10000
20
10
八進位和二進位數字系統之間
的轉換
假設有個二進位數值 011010111110
 我們先將它從右至左,每3個位元為一
組劃分開來
011 010 111 110
 再使用二進位數字與八進位數字的對照
關係,就可以得到:
011 010 111 110
3
2
7
6

38/62
十六進位和二進位數字系統之
間的轉換
以4個位元一組的方式劃分,再逐一對
照二進位和十六進位的表示法,就可以
得到:
0110 1011 1110
6
B
E
也就是68E16的結果。

39/62
二的補數表示法 (two's complement
representation)。

40/62
最左邊的位元代表正負號。將一個正數
變為負數要經由兩個步驟:
1. 將原有二進位數字做補數運算。原
來的所有1改為0,原有0以取1取代。
2. 加1。
將–5寫成二的補數
52 = 0 0 0 0 0 1 0 1
 只要下述兩個步驟:
1. 寫出5的補數
11111010
2. 加1
11111011

41/62
以硬體的方式進行二的補數處
理
1. 將原有的二進位數字從右至左搜尋第一個
「1」出現的位置。
2. 將上步驟找出的位置左邊的所有位元進行
補數處理。
再以上述–5的二的補數運算為例:
圖示如下:
+5:
取補數
42/62
0 0 0 0 0 1 0 1
保留
答案: 1 1 1 1 1 0 1 1
使用二的補數法表示數值可以
簡化CPU內部所需的電路

例如: 5 – 4 = 5 + (-4) :
5
00000101
-4
11111100
1
00000001
(-5) + (-4) :
43/62
-5
11111011
-4
11111100
-9
11110111
答案1 1 1 1 0 1 1 1是–9的二的補數表示式。
從–5到+5的二的補數表示式
44/62
數值
二的補數
5
00000101
4
00000100
3
00000011
2
00000010
1
00000001
0
00000000
-1
11111111
-2
11111110
-3
11111101
-4
11111100
-5
11111011
非整數的二進位表示法

把十進位系統的小數點 (decimal point) 沿用
到二進位系統,稱為基點 (radix point)。
101.1012 = (1 ×22) + (0 ×21) + (1 ×20) + (1 ×2-1)
+ (0 ×2-2) + (1 ×2-3) = 5.62510
45/62
浮點數(floating point number)
在電腦內部的表示法

46/62
在二進位系統中,以32位元 (4-byte) 為例,
實數被分割成兩個部份:
24位元的尾數(mantissa)部份和8位元的指
數(exponent)部份。
尾數的值介於 –1.0和 +1.0之間,而指數介
於 –128到 +127之間。
精確度(precision)和範圍
(range)



47/62
浮點數的精確度受尾數部份限制,而範圍
則受限於指數。
在32位元的表示法中尾數只用了24位元,
所以32位元的浮點數精確度只有七個十進
位數位,簡稱「有七位數的精確度」。
而8位元的指數代表的是2-128到2-127的指數
範圍,所以32位元浮點數的範圍在10-38到
1038之間。
文字資料

48/62
文字資料包括字母和符號,典型的西方文字系統
包括下列幾種組成:
1. 26個大寫英文字母,從 'A' 到 'Z'。
2. 26個小寫英文字母,從 'a' 到 'z'。
3. 10個阿拉伯數字,從 '0' 到 '9'。
4. 其它符號。例如 ( ),{ },[ ],#,% 等。
5. 無法印出的特殊字元。例如鍵盤上的Tab鍵。
儲存一個字元只需要使用一個位元組 (byte)。
ASCII字元碼系統

49/62
除了IBM大型電腦以外,早期幾乎所有
的電腦在儲存字元 (characters) 時,都採
用ASCII字元碼系統 (ASCII Character
Codes),ASCII 是美國標準資訊交換碼
(American Standard Code for Information
Interchange) 的縮寫,一般採用的是
1977年訂定,編號ANSI X3.4的版本。
ASCII字元碼系統
50/62
資料型態 (data type)


位元
bit
51/62
記憶空間範圍內的資料種類。
資料的組成順序
位元組
byte
欄位
field
記錄
record
檔案
file
資料庫
database
前置修飾符號 (prefix)
代表符號
意義
前置修飾詞
K
103
kilo
M
106
mega
G
109
giga
T
1012
tera
例如4.8×109可以寫成4.8 G,而2.07×107寫成20.7 M。
64 Mb代表6.4×107 bits,相當於8 MB,也寫成8 Mbyte。
52/62
二進位數字系統和十進位數字
系統間的關係式
210
220
230
240

53/62
=
=
=
=
1,024
≡ 1K
1,048,576 ≡ 1,024 K ≡ 1 M
210×220
≡ 1,024 M ≡ 1 G
210×230
≡ 1,024 G ≡ 1 T
在這些關係中,為了尋求十進位系統和二進位系
統的一致,我們把1024 定義成1K。例如:
232 = 22×230 = 4,096 M = 4 G
236 = 26×230 = 64 G
242 = 22×240 = 4 T
二進位數字系統在表達效率上
的優越性

例如下面儲存狀態代表 628 (總共用了30個儲存位置) :
百位
十位
個位
0
1
2
3
4
5
6
7
8
9
54/62
但是,同樣的30個位元在二進位數字系統中卻可以代表
230 = 1G ≒ 109種數值變化!
1.5 軟體
程式通常可以分為以下數類:
 作業系統 (operating system)
 應用軟體 (applications)
 應用軟體開發環境(application
development environment)
應用程式開發環境又稱為原生應用軟體快
速開發工具 (Rapid Application Developer),
簡稱RAD。
55/62
1.6 程式語言(Programming
languages)






56/62

機器語言(machine language)
組合語言(assembly language)
編譯式語言(the compiled languages)
直譯式語言(interpreted languages,
interpretive languages)
混合式語言(hybrid languages)
網頁描述語言(web page script languages)
特殊的專用程式語言(第四代程式語言)
1.7 C++程式語言





57/62
C++ 是以C程式語言為藍本而增修的程式語言。
C又沿自兩種更老的程式語言:BCPL和B。
AT&T貝爾實驗室的Bjarne Stroustrup在1980年發
展了C++。
C++ 是一個兼容並蓄的多功能的程式語言,我們
可以使用類似於C的程序式 (procedural) 語法完成
程式,也可以應用物件導向 (object-oriented) 的語
法來開發程式,完全取決於程式設計者的能力和
習慣。
目前幾乎所有的PC-based特用儀器裝置都是以
C++ 或C寫成。
C++ 的歷史-標準化的過程

58/62
最近的修定歷時將近十年,從1989年開始,一直
到1997年年底。其集結修定的結果就是ISO (國際
標準組織,the International Standards Organization)
在1998年9月出版,編號ISO/IEC 14882-1998的文
件:“Information Technology-Programming
Languages - C++”,其篇輻將近750頁。在美國國
內,此標準被納入ANSI (美國國家標準局,
American National Standards Institute) 的官方文獻
內,因此,符合這個標準的C++ 程式語言又稱為
ANSI/ISO C++。
程式語言的演進




59/62
Niklaus Wirth在1971年發表了結構化的程式語言
Pascal。
1970到1980間,美國國防部贊助了Ada程式語言的
發展。Ada可以用來表達許多同時進行的運算,也
就是多工 (multitasking) 的功能。
物件導向程式設計 (object-oriented programming,
簡稱OOP) 技術是提高程式再利用率的有效方式之
一。
除了C語言之外,Bjarne Stroustrup創造C++ 時還引
用了歐洲在1967年發表的語言Simala 67。
程序式程式設計語言 (procedural programming
language) 和物件導向程式設計語言 (object-oriented
programming language)

60/62
FORTRAN、Pascal、BASIC和C等高階程
式語言處理問題的方式著重處理的詳細
步驟 (也就是演算法,algorithms),類似
於工廠內原物料與加工機械的關係,統
稱為程序式程式設計語言。相對於程序
式程式設計語言,物件導向程式設計語
言對於問題的表達比較接近於實際的對
應關係,而不是被演算法所區隔,因此
程式較容易理解,結構較自然,也因此
比較容易維護。
物件導向程式設計的三個相關
技術
1. 封裝 (encapsulation)
2. 繼承 (inheritance)
3. 多型 (polymorphism)
61/62
抽象(abstraction)

62/62
以程式語言來說,包括以下幾種抽象:
1. 副程式 (subroutine又稱為次常式)
2. 抽象資料型態 (abstract data type)
3. 物件導向程式設計 (object-oriented
programming,簡寫為OOP)
4. 泛型演算法 (generic programming)