第三章: 基本資料型態.

Slides:



Advertisements
Similar presentations
1 1.2 信息的表示与存储  数据:数据是对客观事物的符号表示。 如,数值、文字、语言、图形、图像等都是不同形 式的数据。  信息:信息是既是对客观事物变化和特征的反映,又 是事物之间相互作用、相互联系的表征。 信息必须数字化编码,才能用计算机进行传送、存 储和处理。 信息具有针对性和时效性。
Advertisements

第一單元 建立java 程式.
物件導向語言基礎 Chapter 4 認知 學完本章應了解何謂常數、變數。 了解有哪些運算式、運算子和基本輸入、輸出指令。
JAVA 程式設計 資訊管理系 - 網路組.
第二章 數字系統:電腦內部的資料表示法 在第一章中,我們對於電腦有了初步的認識,在深入介紹電腦的各項組成元件之前,首先我們必須先了解另一種不同於人類使用習慣的二進位表示法,由於電腦的半導體、磁性、光學元件適合用來表示二進位,因此二進位表示法非常適合用來設計電腦。
第二章 數字系統:電腦內部的資料表示法 在第一章中,我們對於電腦有了初步的認識,在深入介紹電腦的各項組成元件之前,首先我們必須先了解另一種不同於人類使用習慣的二進位表示法,由於電腦的半導體、磁性、光學元件適合用來表示二進位,因此二進位表示法非常適合用來設計電腦。
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
數字系統與資料表示法.
Chapter 5 迴圈.
第3章 變數與運算子 3-1 電腦記憶體的基礎 3-2 變數的命名與宣告 3-3 VB.NET的資料型別
Visual Basic 6.0 學習範本 第三章 基本資料型態.
資料表示法與數字系統 主講:顧叔財 資料來源: 計算機概論.
A3-1 數字系統 A3-2 資料表示法 A3-3 資料的儲存
2-3 基本數位邏輯處理※.
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
Java程式概觀.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
將( )10表示成下列格式,超64二進制的浮點表示法。
數位邏輯 第2章數字系統 2-1數目系統 2-2數目系統的互換 2-3二進制有號數的加減運算 2-4文數字碼與同位偵錯碼.
新觀念的 VB6 教本 第 6 章 資料型別.
6-1 資料表示法簡介 6-2 數值表示法 6-3 數字系統介紹 6-4 數字系統轉換方式
Java 程式設計 講師:FrankLin.
FPGA計算浮點數的方法 姓名:蔡秉旂.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
第一章 直角坐標系 1-1 數系的發展.
程式設計實習課(四) ----C 函數運用----
URL(Uniform Resource Locator)
第一單元 建立java 程式.
UpToDate Anywhere 設定方法
第三章 資料型態與輸出控制 本章學習目標 認識Matlab的基本資料型態 練習資料型態的轉換 學習如何控制Matlab的輸出格式
數學 近似值 有效數值.
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
第一次Labview就上手 參考書籍: LabVIEW for Everyone (Jeffrey Travis/Jim Kring)
CH05. 選擇敘述.
挑戰C++程式語言 ──第8章 進一步談字元與字串
|第 2 章 變數與資料型態.
認識常數與變數 學習C++所提供的各種基本資料型態 瞭解溢位的發生 學習認識資料型態之間的轉換
第2章 電腦基本原理 2-1 數位化觀念 資訊科技概論--電腦科學導論.
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
利用 EditorConfig 自訂文字編輯器設定
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
計算機程式設計 老師:蘇炳煌 助教:楊斯竣.
函數應用(二)與自定函數.
陣列與結構.
第 4 章 認識 SQL 語言與資料型別.
1.電腦數字系統介紹 2.電腦數字系統轉換 3.資料在電腦內部的表示法
1-1 二元一次式運算.
國中資訊教育(I) 第二章 認識電腦 2-2 資料的表示.
數位邏輯 第2章數字系統 2-1數目系統 2-2數目系統的互換 2-3二進制有號數的加減運算 2-4文數字碼與同位偵錯碼.
1757: Secret Chamber at Mount Rushmore
資料表示方法 資料儲存單位.
第一章 直角坐標系 1-3 函數及其圖形.
作業系統實習課(二) -Scheduler-Related System Calls-
Programming & Language Telling the computer what to do
第三章 Arduino互動程式設計入門 Arduino程式基礎 認識變數 認識數字系統 認識常數.
變數、常數與資料型態 大綱 變數與常數 變數 資料型別 資料的輸出.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
11621 : Small Factors ★★☆☆☆ 題組:Problem Set Archive with Online Judge
快取映射 之直接對映 計算整理.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

第三章: 基本資料型態

章節預覽 3.1 二進制及儲存單位 3.2 變數與常數 3.3 數字系統 3.4 轉換數字系統 3.5 正負數表示法 3.6 文字資料表示法

3.1:二進制及儲存單位 電腦使用的是二進位數(Binary Digit)表示資料。 以11001來表示五根水管的 開關狀態 二進位每一個位數稱之為位元(Bit)。可用來表示0或1的狀態,相對於電子元件的狀態,則可以將0視為關,1視為開。 以11001來表示五根水管的 開關狀態

3.1:二進制及儲存單位 Bit是記憶體的最小儲存單位,由於電腦硬體結構的定址緣故,因此,許多的高階語言只提供Byte做為最小儲存單位。 1Byte=8 Bits。 1Byte可以產生28=256種變化。 可用來代表某些符號,例如:A、a、#、、等等。也可用來表示0~255或-128~127的數值。 程式必須放在主記憶體中才能被執行 主記憶體由許多連續的記憶體位置所組成,每一個位置都可以用來存放資料或程式。 為了存取記憶體位置內的資料或程式,因此每一個位置都被賦予一個特定的位址(address) 。 當讀取或寫入資料時,事實上就是指定讀取或寫入特定記憶體位址內的資料。

3.1:二進制及儲存單位 字元組(Word):另一種計算存取資料的單位 Byte仍是記憶體儲存單位最常被使用的表示單位。 一個Word可能等於2個bytes(16位元電腦)、4個bytes(32位元電腦)、8個bytes(64位元電腦)。 通常一部電腦所使用的Word長度越長時,代表一次可存取的資料長度越長,因此程式執行速度可能越快(必須視程式所使用的指令而定)。 Byte仍是記憶體儲存單位最常被使用的表示單位。 1 KBytes (KB) = 210 Bytes = 1024 Bytes (近1千) 1 MBytes (MB) = 220 Bytes = 1,048,576 Bytes (近100萬) 1 GBytes (GB) = 230 Bytes = 1,073,741,824 Bytes (近10億) 1 TBytes (TB) = 240 Bytes = 1,099,511,627,776 Bytes (近1兆)

3.2:變數與常數 變數的意義:變數代表在程式執行過程中可能會被改變的某個數值。 以現實的環境來說,我們所身處的世界就是一個多變數的世界,例如:全球人口數每天都不同,受出生人口、死亡人口、意外事件發生率、甚至於季節條件而等變化。而其他的條件也都是一個不斷改變的變數(也可能再受其他變數的影響)。 程式的運作是靠眾多變數的變化來完成的,例如:一個計算長方形面積的程式,至少就必須包含3個變數:長、寬、面積。長、寬、面積皆為可變動的變數,才能計算各種不同大小的長方形面積。

3.2:變數與常數 變數的意義 程式的運作主要是靠CPU與記憶體的合作來完成,而程式中的變數將存放在記憶體,如右圖。 變數在記憶體中佔用了某一小塊記憶 體,程式可以由記憶體位址取得這些 變數內容,但是,對於人來說,記憶 體位址是非常難以記憶與了解的,因 此,所有的高階語言都提供了以名稱 來代替變數在記憶體中的位置。 初學程式設計時,只要記得變數名稱 實際上將對應到某一個記憶體位址, 並且該變數就是用來儲存某項資料。

3.2:變數與常數 變數的命名方式與規則 每一個變數都各自擁有一個不同的名稱已示區隔,在Visual Basic中為變數命名時必須遵守下列規則: 變數名稱的第一個字元為『大小寫字母(A~Z、a~z)』 或『中文』字元。 第二個以後的字元可以為『大小寫字母(A~Z、a~z)』 或『0~9』或『_』或『中文』字元。 變數名稱盡量不要使用中文。 變數名稱長度不可超過255個字元。 變數名稱的大小寫視為相同。 變數名稱不可以是Visual Basic的保留字。

3.2:變數與常數 保留字(Reservered Word) : 程式語言的特定字,通常保留用來代表敘述、運算子、函數、屬性、事件、方法等特殊文字。這些關鍵字對於編譯器而言是有特殊意義的,不可以拿來做為變數名稱。 傳統BASIC語言中,變數名稱的最後一個字元可以用來代表資料型態,例如:%、&、!、#、@ 、$等。 但並不建議使用這種方式宣告資料型態。

3.2:變數與常數 變數名稱除了必須符合規則之外,根據程式開發的實際經驗,下列是變數命名的幾項建議: Visual Basic的變數名稱是不分大小寫的。例如:Sum、SUM、sum代表同一個變數名稱。 盡量使用有意義的名詞或名詞的組合做為變數名稱,以提高程式的可讀性。 例如:某一個變數代表檔案的總行數,則可以命名為Line_Count或LineCount,以便讓維護程式的設計師容易了解該變數的實際意義。 若開發由多人共同發展的大型程式時,更需要取得變數命名的一致性原則。 未設定變數的初始值時,則數值變數的預設值為『0』、字串變數的預設值為『空字串』。

3.2:變數與常數 變數的資料型態 宣告變數應該以最適當的資料型態為主,宣告不適當的資料型態可能無法負擔未來變數的變化,或者浪費記憶體空間。

3.2:變數與常數 變數的資料型態-變數長度 變數的資料型態-變數宣告 各種資料型態所佔用的記憶體大小皆不相同,能夠表達的資料範圍也不相同。 宣告變數時,應該依照該項資料可能的變化量,決定使用哪一種資料型態。(參閱下一頁表格) 變數的資料型態-變數宣告 不論是哪一種的資料型態變數,基本上都可使用Dim, Redim, Static, Public等敘述來宣告,差別只在於As之後的資料型態。 使用Dim宣告變數語法: 範例: Dim 變數名稱 As 資料型態 敘述 說     明 Dim A1 As Integer 宣告A1為整數變數。 Dim S1 As String 宣告S1為變動長度字串型態變數。

各種資料型態變數總表 資料型態 佔用儲存空間 有效範圍 Byte (位元組) 1 Byte 0 ~ 255 Integer (整數) 2 Bytes -32,768 ~ +32,767 Long (長整數) 4 Bytes -2,147,483,648~ +2,147,483,647 Single (單精確度) -3.402823E+38~ -1.401298E-45 +1.401298E-45~ +3.402823E+38 Double (倍精確度) 8 Bytes -1.79769313486231E+308~ -4.94065645841247E-324 +4.94065645841247E-324~+1.79769313486231E+308 Currency (貨幣) -922337203685477.5808~+922337203685477.5807 String (固定長度字串) 每一個字元佔1 Byte 0 ~ 65,535個字元 String (變動長度字串) 10 Bytes + 字串長度 可變長度字串最多231 個字元。 Boolean (布林) True(1或非0)或False(0) Date (日期) 西元100年1月1日 ~ 西元9999年12月31日 Object(物件) 任何引用的Object Variant (自由型態) 數值:16 Bytes 字串:22 Bytes+ 字串長度 任何數值、字串、物件、陣列、Null、 Error等 Decimal 14 Bytes Variant之副型態,有效位數為28位,若變數不能宣告為Decimal的型態,則須使用Cdec函數來建立

數值變數 單精確度資料型態的變數值若超過7位數,例如123000000),會以科學記號表示 範  例 Byte 位元組 Dim I1 As Byte Integer 整數 Dim I1 As Integer I1% = 50 (不建議使用) Long 長整數 Dim I1 As Long I1& = 100000 (不建議使用) Single 單精確度 Dim F1 As Single F1! = 123.4 (不建議使用) Double 倍精確度 Dim F1 As Double F1# = 1.2D + 10 (不建議使用) Currency 貨幣 Dim C1 As Currency C1@ = 123.45(不建議使用) Decimal 這是一種Variant的一個副型態。 單精確度資料型態的變數值若超過7位數,例如123000000),會以科學記號表示 123000000 → 1.23×108 倍精確度資料型態的變數值若超過15位數,也會以科學記號表示。 科學記號格式: 例如:123000000→ 1.23×108→1.23+E8。 例如:0.0000123→ 1.23×10-5→1.23-E5。 a+Ec 或 a-Ec a:數值,1≦a<10。 E:底數為10的次方表示法。 c:次方數(底數為10)。

數值變數 【範例1】位元組變數(Byte) 【範例2】整數變數(Integer) 範例 說 明 Dim I1 As Byte 說     明 Dim I1 As Byte 宣告I1為位元組變數(有效數值範圍0~255)。 I1=100 設定I1的變數值為100。 Print I1 顯示I1的變數值,例如100。 I1=256 設定I1的變數值為256,但由於超過位元組的有效數值範圍0~255,因此會發出"溢位"的錯誤訊息。 範例 說     明 Dim I1 As Integer 宣告I1為整數變數(有效數值範圍-32768~+32767) I1=-50 設定I1的變數值為-50。 Print I1 顯示I1的變數值,例如-50。 I1=123.4 先將123.4四捨五入成整數,再指定為I1的變數值。 顯示I1的變數值,例如123。

數值變數 【範例3】長整數變數(Long) 【範例4】單精確度變數(Single) 範例 說 明 Dim I1 As Long 說     明 Dim I1 As Long 宣告I1為長整數變數 (有效數值範圍-2,147,483,648 ~ +2,147,483,647) I1=1000000 設定I1的變數值為1000000。 Print I1 顯示I1的變數值,例如1000000。 範例 說     明 Dim F1 As Single 宣告F1為單精確度浮點數變數 F1=12.3 設定F1的變數值為12.3。 Print F1 顯示F1的變數值,例如12.3。

數值變數 【範例5】貨幣型態變數(Currency) 【範例6】Decimal型態變數 Decimal資料型態屬於一種Variant的副型態,必須先將變數宣告為Variant自由型態,然後再利用Cdec函數,指定變數為Variant的Decimal副型態。 範例 說     明 Dim C1 As Currency 宣告C1為貨幣型態的變數 C1=1234567890.12@ 設定C1的變數值。 Print C1 顯示C1的變數值,例如1234567890.12。 範例 說     明 Dim D1 As Variant 宣告D1為自由型態變數。(可省略) N1=Cdec(123456789012@) 指定D1變數值為123456789012,並儲存為Variant的Decimal副型態 Print D1 顯示D1的變數值,例如123456789012。

字串變數 宣告固定長度與變動長度字串 固定長度字串變數只有一種宣告方式 變動長度字串變數有兩種宣告方式 只宣告字串(不設定字串值) 直接設定字串值(不經宣告) 對於大多數程式語言來說,一個中文字通常佔用2個英文字元寬度。但對於Visual Basic而言,一個中文字元的寬度仍然為1 (例如:使用Len()函數) 。 資料型態 宣告範例 String*長度數值 (固定長度字串) Dim str1 As String * 10 String (變動長度字串) (1) Dim str2 As String (2) str2 = "Hello"

字串變數 【範例1】固定長度字串變數 範例 說 明 Dim str1 As String*10 說     明 Dim str1 As String*10 宣告固定長度字串變數str1,其字串有效長度為10個字元。 str1="Hello" 設定字串變數str1的變數值為"Hello",由於不足10個字元,因此不足部分會被空白字元所補滿。 Print str1 顯示str1字串變數值,也就是『Hello△△△△△』,其中△代表空白字元。 str1="I love Hello Kitty " 將字串變數str1的內容指定為"I love Hello Kitty ",由於超過10個字元,因此只會將前10個字元指定為str1內容。 顯示str1字串變數值,也就是『I love Hel』,空白字元也算一個字元。

字串變數 【範例2】變動長度字串變數 字串的特殊字元『 " 』: 字串的指定是透過『"』來包裝字串,但若字串中也出現『"』時,則需要在『"』字元前再加上一個『"』。 例如:"I love ""Hello Ketty""" 代表『I love "Hello Ketty"』字串。 範例 說     明 Dim str1 As String 宣告變動長度字串變數str1。 str1="Hello" 設定字串變數str1的變數值為"Hello"。 Print str1+ " Kitty" 顯示str1字串變數值及指定字串的連結結果,也就是『Hello Kitty』。

日期變數 【範例】日期資料型態變數 範例 說 明 Dim D1 As Date Dim D2 As Date 說     明 Dim D1 As Date Dim D2 As Date 宣告日期資料型態變數D1、D2,若要同時宣告兩個變數,也可以寫成 Dim D1 As Date, D2 As Date D1="2003/3/20" 設定D1變數值為西元2003年3月20日。 D2="2003/4/20" 設定D2變數值為西元2003年4月20日。 Print D2 顯示D2的變數值,例如"2003/4/20"。 Print D2-D1 顯示D2與D1的相差日數,即"31"。 Print D1+10 顯示D1 之後10日的日期,即"2003/3/30"。

自由形態的變數(Variant) 傳統的BASIC語言,變數不需宣告就可以直接取用(與C/C++等其他高階語言不同) 因此變數的資料型態必須等到實際指定變數值的時候才能由直譯器決定。 為了可動態改變資料型態的變數,Visual Basic提供了特殊的Variant自由形態變數。 宣告為『Variant自由形態』變數,可隨意地指定變數值為各種資料型態的數值或字串,而這些資料型態稱為Variant的副形態。 例如:Dim V1 As Variant ,將V1宣告為自由型態變數,V1變數可以存放數值、字串,甚至是物件。 Visual Basic內定所有未經As資料型態宣告的變數,都被視為自由型態變數。 例如:Dim V2與Dim V2 As Variant完全相同。 自由型態變數提供了極大的彈性,但也佔用相當大的記憶體空間,使得運算速度變慢(因為必須判斷指定的變數值),所以不必要使用自由形態變數時,最好盡量避免使用。

自由形態的變數(Variant) 【範例】Variant自由型態變數 範例 說 明 Dim V1 As Variant 說     明 Dim V1 As Variant 宣告Variant自由形態變數V1,此敘述可省略或宣告為Dim V1即可。 V1 = 100 將整數資料100指定為自由型態變數V1的變數值,其副型態為『整數』。 Print V1 顯示V1的變數值,例如100。 V1 = 12.34 將單精確度型態資料12.34指定為自由型態變數V1的變數值,其副型態為『單精確度形態』。 顯示V1的變數值,例如12.34。 V1 = "Hello Kitty" 將字串型態資料"Hello Kitty"指定為自由型態變數V1的變數值,其副型態為『變動字串』。 顯示V1的變數值,例如"Hello Ketty"。

布林變數、物件變數、使用者定義變數 布林變數: 物件變數與使用者定義變數超出本課程範圍,暫時不加以討論。 僅能表達True(真)與False(假)兩種狀態的變數,留待第六章再討論。 物件變數與使用者定義變數超出本課程範圍,暫時不加以討論。 變數資料型態的宣告非常重要,尤其是下列兩種時機尤其明顯: (1) 由於自由型態變數佔用大量記憶體空間,因此,對於佔用記憶體較多的變數(例如陣列),應該盡量宣告明確的資料型態而不要使用自由型態。(參閱第10章) (2) 程序的參數傳遞,要求參數的資料型態必須相同,否則容易發生錯誤。(參閱第11章)

3.2:變數與常數 常數 常數在日常生活中無所不見,例如:圓周率π、自然指數e、光速等等,代表的意思是在宇宙間永遠不會變動的數值。 對於程式而言,常數則是一個在程式執行過程中不會被改變的某個數值、字元或字串。 常數在執行過程中,同樣會佔用某些記憶體,但是該記憶體內容卻不會改變。也就是說,「常數」在程式執行前會先給定一個值,而在執行過程中該常數值不會改變。 Visual Basic的常數分為兩類: 文數字常數 (Literal Constant) 符號常數 (Symbolic Constant)

文數字常數(Literal Constant) 文數字常數由一連串的字元組合而成,這些字元包含中文、英文字母、數字或特殊符號。 在Visual Basic中,字串格式的文數字常數前後必須使用『"』括起來,其長度可達65535個字元。 【範例】正確的字串常數。 【範例】不正確的字串常數。 " Hello " " Hello Ketty" "12,000" " a + b = ? " "10+100=1000" "您好嗎?" "Hello Ketty (缺少右邊的雙引號) 您好嗎?" (缺少左邊的雙引號)

符號常數(Symbolic Constant) 符號常數的範例: 當常數內容變動時(例如:利率更動),只需要修改符號常數的內涵,而不需要更改使用該常數的所有程式碼。 (宣告符號變數) Const pi = 3.14 Print pi R = 10 Print 2 * R * pi Print R * R * pi (列印圓周率) (計算圓周長) (計算圓面積)

符號常數(Symbolic Constant) 使用符號常數的優點: 增加程式可讀性 使用符號常數來代表常數值,可以用具有意義的名稱做為符號常數名稱,因此將有助於了解程式的各個運算式所代表的涵義。 方便維護: 當常數值需要變動時,不需要更改所有使用到該常數的運算式,只要修改Const敘述的符號常數內容,就可以一次將所有使用到該常數的運算式全部更改完畢。

3.3:數字系統 由於數位電子訊號的緣故,電腦內部的數字系統只能採用二進制(0與1的變化) 。 過長的01字串常常使得程式設計師閱讀不易,因而採用8進制或16進制來對應機器碼。這是由於8進制與16進制,相對於10進制而言,更容易與2進制做直覺性的轉換。 十進制數字系統 十進制是人類最常使用的數字系統,每一位數共有0~9等10種變化,並且逢十進位。 每一位數稱之為位數(Digit), 最高位數稱為MSD(Most Significant Digit)、 最低位數稱為LSD(Least Significant Digit)

3.3:數字系統 十進制數字系統具有下列特性: 每一位數能接受的數字符號為:0,1,2,3,4,5,6,7,8,9。 每一位數所代表的量,根據其位置而有不同的指數加權(底數為10)。 整數部份由小數點的左邊以10的正冪次方向左逐一遞增(次方由0開始)。 小數部份由小數點的右邊以10的負冪次方向右逐一遞減(次方由-1開始)。 10進制在做運算時,每一位數逢10向左進位。

3.3:數字系統 十進制數字系統 【範例】:307.25之位置及加權計算如下:

3.3:數字系統 二進制數字系統 半導體元件扮演的是一個類似開關的角色,電腦由於是使用半導體製作而成,因此,電腦內部也是以0(關)、1(開)變化來表示資料。 只有0、1變化的數字系統稱為2進制數字系統。通常為了與10進制的數值產生區別,因此在數值右下角加上一個下標2以示區隔。 2進制數字系統有以下特性: 每一位數(Digit)只接受0、1兩種變化,因此二進制的位數又稱為位元(Binary Digit;縮寫為BIT)。最高有效位元稱為MSB(Most Significant Bit)、最低有效位元稱為LSB(Least Significant Bit)。 每一個Bit所代表的量,根據其位置而有不同的指數加權(底數為2)。 整數部份由小數點的左邊以2的正冪次方向左逐一遞增(次方由0開始)。 小數部份由小數點的右邊以2的負冪次方向右逐一遞減(次方由-1開始)。 2進制在做運算時,每一Bit逢2向左進位。(所以12+12不是等於2喔,12+12是等於102)

3.3:數字系統 二進制數字系統 【範例】:1001.1012之位置及加權計算如下:

3.3:數字系統 十六進制數字系統 由於使用二進制來表示數值,常常會出現一連串的0、1串列,例如:245就必須使用11110101來表示。這一連串的0、1串列常常使得程式設計師不容易清楚地加以識別。 為了提高數值的可讀性,通常採用8進制或16進制來表示記憶體內的資料。 16進制數字系統具有下列特點: 每一位數可能接受的數字符號為0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(其中A代表10、F代表15,依此類堆。) 每一位數所代表的量,根據其位置而有不同的指數加權(底數為16)。 整數部份由小數點的左邊以16的正冪次方向左逐一遞增(次方由0開始)。 小數部份由小數點的右邊以16的負冪次方向右逐一遞減(次方由-1開始)。 16進制在做運算時,每一位數逢16向左進位。 通常會在數值右方加上16代表16進制數字,或者在數值結尾加上h或H來表示使用大小寫的16進制數字,例如:1AH、5dh。

3.3:數字系統 十六進制數字系統 【範例】:6A416之位置及加權計算如下:

3.4:轉換數字系統 不同進制數字系統之間的轉換 2進制→ 10進制及16進制→ 10進制的轉換, 如上所述。 轉換其他進制,則依照下列規則來進行轉換。 整數部份: 以原數值為被除數、目標進制的基底為除數進行除法,所得之餘數保留,然後以商與目標進制的基底為被除數及除數重複除法,直到無法再除(商數為0)為止。然後將所得之餘數反轉即可。 小數部份: 將(該數之小數部份)×(目標進制的基底),所得的整數部份保留,扣除整數部分繼續乘法,直到所指定的位數或為0時停止(若出現循環也必須停止)。所得整數部分連結即為欲轉換進制之小數部分。

3.4:轉換數字系統 十進制轉二進制 【範例】:將38.37510轉換為2進制 整數與小數部分需要分開處理。 整數部分:3810=(100110) 2=(00100110) 2 【若需補足一個Byte】

3.4:轉換數字系統 十進制轉二進制 【範例】:將38.37510轉換為2進制 整數與小數部分需要分開處理。 小數部分:0.37510=(0.011)2 合併整數與小數:38.37510=(100110.011)2

3.4:轉換數字系統 二進制與十六進制的轉換 以2進制的4個bits對應1個16進制的位數 十進制 0000 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A 10 1011 B 11 1100 C 12 1101 D 13 1110 E 14 1111 F 15 二進制與十六進制的轉換 以2進制的4個bits對應1個16進制的位數 以小數點為準,整數部分由右向左計算4位數為一個單位(不足部分前面補0) 以小數點為準,小數部份由左向右4位數為一個單位(不足部分請補尾數0)

3.4:轉換數字系統 二進制轉十六進制 【範例】:將1011001010.11011012轉換為16進制

3.4:轉換數字系統 16進制與10進制之轉換,可以先透過2進制做為中繼格式,再行轉換 十六進制轉二進制 【範例】:將3AB.516轉換為2進制 16進制與10進制之轉換,可以先透過2進制做為中繼格式,再行轉換 例如:16進制→ 2進制→ 10進制。

3.5:正負數表示法 3.4節所介紹的二進位數值表示法,可以表達正整數,但對於負整數卻無法表達。 為了讓電腦也可以表達負數,數學家發明了許多的數值表示法,並且很多都可以透過邏輯電路加以實作 帶符號大小(signed-magnitude) 1's補數(1's complement) 2's補數(2's complement) 三種最常見的正負數表示法必須事先固定位元長度。

3.5:正負數表示法 帶符號大小 有一個位元用來表示該數值為正數還是負數。這個位元通常位於最左邊 使用n個位元來表達正負整數時,數值的表達範圍就只剩n-1個位元可以使用 正整數的表達範圍是+0~+(2n-1-1),負整數的表達範圍是-(2n-1-1)~-0 +0與-0不同。 以8位元來表示正負整數時, 若採用帶符號大小來表示,方法 如右圖: 不被採用做為正負整數的表示法, 這是因為帶符號大小表示法有 下列兩項缺點: +0與-0的表示不同。 不容易使用邏輯電路加以實作相關應用電路,例如加/減法器。

3.5:正負數表示法 1's補數(1's complement) 必須先求得正整數,然後再將每個位元加以反相(inverse),就可以得到負整數了 所謂反相,其實就是將該位元由1變0或由0變1 1's補數的轉換機制是可逆的 看到負的1's補數二進位數字時,可透過反相求出該負整數的絕對值。

3.5:正負數表示法 1's補數與帶符號表示法的相同點 必須限制表示的位元數。 可以透過最左邊的位元快速判定該數為正整數或負整數。 正負整數的表達範圍相同,都是+0~+(2n-1-1)、-(2n-1-1)~-0(位元寬度為n時)。 正整數部分,兩者完全相同。 +0與-0的表示方式不同。 不是電腦採用的數值表示法 反相可以透過邏輯電路輕鬆設計完成 但+0(00000000)與-0(11111111)仍不相同

3.5:正負數表示法 2's補數(2's complement) 最完美的正負二進位整數的表示法(也是電腦真正採用的二進位整數表示法)

3.5:正負數表示法 『正整數轉負整數』或『負整數轉正整數』所使用的方法相同 例如,看到2's補數二進位負整數110010112時,可以先將其反相(使用1's補數的方法),然後再加1,就可以得到該負整數的絕對值了。 2's補數是現今大多數電腦內部的邏輯電路所採用的整數表示法,因為它具有下列特點: +0與-0的表示法相同。以8個位元來加以表示+0與-0,都是000000002。 可以透過最左邊的位元快速判定該數為正整數或負整數。(最左邊位元為0,一定是正整數或0)。 負整數的表達範圍更大,它可以表達的整數範圍是 +(2n-1-1) ~ -2n-1(位元寬度為n時)。而-2n-1的表示法就是1000…0002。 可以輕易地使用邏輯電路實作加/減法器,並且正負數轉換機制相同,因此不必額外設計一套電路。

3.5:正負數表示法 十進位 帶符號大小 1's補數 2's補數 +7 0111 +6 0110 +5 0101 +4 0100 +3 0011 +2 0010 +1 0001 +0 0000 -0 1000 1111 -1 1001 1110 -2 1010 1101 -3 1011 1100 -4 -5 -6 -7 -8 無法表示

3.6:文字資料表示法 文字資料又是如何被放到記憶體的呢? 由於每一個記憶體單元只能接受0、1等2進制的表示法,因此文字資料必須先經由編碼,使得不同的字元對應到唯一的位元圖樣(bit pattern),然後才能存入記憶體中。目前最普遍的編碼為ASCII,繁體中文則為Big5碼。此外,為了統一各國文字的編碼方式,另外也發展了Unicode編碼方式。 ASCII碼(American Standard Code for Information Interchange) 美國國家標準局所制定的一種編碼方式,目的是提供一個各類電腦皆通用的編碼方式以便於使得這些電腦可以互通訊息。 ASCII碼為7個bits,因此可以產生128種變化,每一個變化都可以用來表示一個特殊字符,其中的95個字符為可列印字符,剩餘的字符則為不可列印的特殊控制字符,例如:換列、倒退鍵、歸位等。 ASCII表請見附錄D 並非所有的系統都採用ASCII編碼方式 例如IBM則採用8位元碼EBCDIC(Extended Binary Coded Decimal Interchange Code)或ASCII-9,以便表達較多的字元變化。

3.6:文字資料表示法 中文內碼 中文字與英文字差異極大,英文單字是由許多字母所組成,由於大小寫字母與標點符號加起來並不會超過128種變化,因此可以使用ASCII碼來表示,也就是使用1個Byte就可解決每一個字母的表示法。 中文字與英文字差異極大,英文單字是由許多字母所組成,由於大小寫字母與標點符號加起來並不會超過128種變化,因此可以使用ASCII碼來表示,也就是使用1個位元組就可解決每一個字母的表示法 中文字多達數萬字,因此必須使用2個位元組來加以儲存一個中文字型的內碼,通常我們將這種編碼方式稱為『雙位元組編碼』,就中文而言則稱為「中文內碼系統」。 國內發展的中文內碼,目前大多以資策會所制定的Big-5碼做為中文系統。一共約制訂一萬三千多個中文字內碼。 就記憶體儲存而言,1個中文字元的實際寬度相當於2個英文字元,但在Visual Basic中,1個中文字元的寬度仍等於1個英文字元

3.6:文字資料表示法 Unicode 除了中文外,許多非英語系國家也面臨文字數量過多的問題 依據ISO/IEC 10646標準所制定的一套通行全球的編碼系統,Unicode使用2個位元組來表示字元符號,因此可以產生65536個字元 其中最前面的128個字元與ASCII相同。 使用Unicode將可以讓電腦處理目前人類所遭遇的所有語系 英文、中文、日文、法文、拉丁文‥‥等等 不需要為各種不同語系設計不同的編碼系統,通常在網際網路中,尤其容易見到。 Unicode已經將各國編碼系統打亂,重新制定單一的編碼系統。並且大多數的瀏覽器都已經支援了Unicode字集,以便顯示包含各國文字的網頁。 我們暫時不會接觸到Unicode字集的程式設計,因此暫時不多加討論。

本章回顧 理論 二進制及儲存單位的關係 變數與常數的意義與區別(含Visual Basic宣告語法) 2進制、10進制、16進制數字系統 各類數字系統的轉換方法 二進制的正負數表示法 帶符號大小 1's補數 2's補數 文字資料表示法 ASCII 中文內碼: Big5 Unicode

本章習題