Objective-C 2.0 Programming: Literals

73
 C`hgmtjvg-M   稁弃訫訏   笥 0   竬 官敿/Ejtgrdes 紌俈甾/Pc`grt MojmcbtdmtLrc`grtmoj.tw

description

Instructor: Robert C. ChiCourse: Objective-C 2.0 ProgrammingChapter 2: Literals

Transcript of Objective-C 2.0 Programming: Literals

Page 1: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 1/73

Objective-C  程式設計  第

2    章 定數(

Literals)

 紀俊男(Robert Chi)[email protected]

Page 2: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 2/73

本章大綱• 定數簡介• 整數定數• 浮點數定數

• 文字定數• 布林值定數

Objective-C Programming  第 2  章 2

Page 3: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 3/73

定數簡介

Objective-C Programming  第 2  章 3

Page 4: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 4/73

  何謂定數• 定義

o 固定 不變的  數  值。

• 範例o

123o „A‟

o “This is a book”

Objective-C Programming  第 2  章 4

Page 5: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 5/73

  種類

Objective-C Programming  第 2  章 5

定數(Literals)

文字定數

(Texts)

浮點數定數(Floating Points)

整數定數(Integers)

布林值定數(Booleans)

Page 6: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 6/73

  整數定數

Objective-C Programming  第 2  章 6

Page 7: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 7/73

  依照進制來分

Objective-C Programming  第 2  章 7

123 十進位

0123 八進位

0x123 十六進位

Page 8: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 8/73

  依照進制來分• 如何用 printf()  印出各種進位?

Objective-C Programming  第 2  章 8

printf(“Decimal: %d \ n”, 123);

printf(“Octal: %o \ n”, 0123);

printf(“Hexadecimal: %x \ n”, 0x123);

Page 9: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 9/73

  依照進制來分• %o 與 %x  的特殊旗號

Objective-C Programming  第 2  章 9

printf(“Octal: %o \ n”, 0123);

printf(“Hexadecimal: %x \ n”, 0x123);

  印出 123

  印出 123

printf(“Octal: %#o \ n”, 0123);

printf(“Hexadecimal: %#x \ n”, 0x123);

  印出 0123

  印出 0x123

看不出是幾進位

看得出是幾進位

Page 10: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 10/73

Lab 02-01• 目的

o 學習如何使用 printf(),印出不同的進制。

• 步驟o

請開啟 Lab/Practices/   中的專案:「02-01-IntLiteralRadix」。o 請修改原始碼,讓前三個 printf() 分別印出 123, 0123, 0x123。o 請修改原始碼,把 123 分別用十進位、八進位、十六進位印出來看看。o 最後請用 %#o, %#x,代替 %o, %x,讓印出來的數字更容易辨認是幾進位。

Objective-C Programming  第 2  章 10

Page 11: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 11/73

Lab 02-01• 解答

Objective-C Programming  第 2  章 11

Page 12: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 12/73

  依照有號數 / 無號數來分

Objective-C Programming  第 2  章 12

123u 無號數

-123 有號數

Page 13: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 13/73

  依照有號數 / 無號數來分• 如何用 printf() 來印出有號數與無號數?

Objective-C Programming  第 2  章 13

printf(“Signed: %d \ n”, -123);

printf(“Unsigned: %u \ n”, 123u);

Page 14: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 14/73

  依照有號數 / 無號數來分• 電腦如何僅用 0 與 1 表示有號數、無號數?

Objective-C Programming  第 2  章 14

7(無號數)

-7(有號數)

直接化為二進位00000111

以「二補數法」表示之11111001

Page 15: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 15/73

  依照有號數 / 無號數來分• 「二補數法」(2‟s Complement)背後思維

Objective-C Programming  第 2  章 15

18- 7------

11

18+ (-7)--------

11

00010010

00001011

????????----------------

Page 16: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 16/73

  依照有號數 / 無號數來分• 「二補數法」(2‟s Complement)背後思維

Objective-C Programming  第 2  章 16

18+ (-7)--------

11

0001001011111001-------------000010111

11

-7

Page 17: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 17/73

  依照有號數 / 無號數來分• 「二補數法」求算流程

o 問:使用「二補數法」,求「-7」的二進位表示法。

o 答:• 去負號: -7 7

• 化為二進位: 7 00000111

• 將 0 與 1 全數顛倒: 00000111 11111000(此數稱為「一補數」(1‟s Complement))

• 將上述數字加一: 11111000 + 1 = 11111001(此數為「一補數加一」,故稱「二補數」)

• (-7) 二進位表示法 = 11111001

Objective-C Programming  第 2  章 17

Page 18: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 18/73

  依照有號數 / 無號數來分• 關於「二補數」的觀察與速算法

o 根據觀察結果,所有負數的二進位表示法,最高位元都一定是「1」以後看到有號數  的二進位表示法,最高位元為 1者,必為「負數」。

o 取得某個二進位之「二補數」的速算法• 從二進位的後方(低位數)往前看。• 若碰到 0,就保持不管。• 碰到第一個 1,保持為 1。

• 其後 0 / 1 全數顛倒。

Objective-C Programming  第 2  章 18

有號數01001011 必為「正  數」

11001010 必為「負  數」

0100 000172

1011 0001-72

Page 19: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 19/73

  依照有號數 / 無號數來分• 看到一個二進位,怎知它是有號數還是無號數?

o 口訣:「電腦只有 0與 1,怎麼解釋看自己!」 請記住!很重要!

Objective-C Programming  第 2  章 19

1 1 0 1 0 0 1 1

= - 00101101

= - (0+0+25+0+23+22+0+20)

= - (32+8+4+1)

= - 45

1 1 0 1 0 0 1 1

無號數 有號數

1 1 0 1 0 0 1 1

= 27+26+0+24+0+0+21+20+

= 128+64+16+2+1

= 211

「二補數」

都可以!

Page 20: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 20/73

Lab 02-02• 目的

o 學習如何使用 printf(),正確印出有號數與無號數。o 了解「電腦只有 0 與 1,怎麼解釋看自己」這件事。

• 步驟o 請開啟 Lab/Practices/   中的專案:「02-02-IntLiteralSign」。o 請修改原始碼,讓:

• 第一個 printf()  能順利印出一個有號數。• 第二個 printf()  能順利印出一個無號數。

o 請修改後面兩個 printf(),讓它們以有號數、無號數的方法,各自印出一個負數。o 您能說明最後一個 printf()  的執行結果嗎?

• 提示:使用 Mac 上免費的工程型計算機「Magic Number Machine for Mac」,將 -123 以十進位輸入,轉以 32 bits  的二進位輸出。

Objective-C Programming  第 2  章 20

Page 21: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 21/73

Lab 02-02• 解答

Objective-C Programming  第 2  章 21

Page 22: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 22/73

  依照大小來分

Objective-C Programming  第 2  章 22

123

•  名稱:一般整數(Integers)•  寬度:

• 16  位元系統: 2 bytes• 32/64  位元系統: 4 bytes

•  目前:4 bytes

123L

•  名稱:長整數(Long Integers)•  寬度:

• 至少 4 bytes•  實際長度由編譯器決定

•  目前:8 bytes

123LL

•  名稱:超長整數(Long Long Integers)•  寬度:

• 至少 8 bytes•  實際長度由編譯器決定

•  目前:8 bytes

Page 23: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 23/73

  依照大小來分• 如何用 printf(),印出各種整數定數?

Objective-C Programming  第 2  章 23

printf(“Integer: %d \ n”, 123);

printf(“Long Integer: %ld \ n”, 123L);

printf(“Long Long Integer: %lld \ n”, 123LL);

Page 24: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 24/73

  依照大小來分• 如何證實各種定數表示法,在記憶體內的大小?

Objective-C Programming  第 2  章 24

sizeof( 123 )

sizeof( 123L )

sizeof( 123LL )

printf(“Size:  \ n”, );%lu

註:sizeof()固定傳回「無號長整數」

Page 25: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 25/73

Lab 02-03• 目的:

o 學習如何印出「一般整數」、「長整數」、「超長整數」。o 透過 sizeof 函數,了解上述定數在記憶體所佔的大小。

• 步驟o 請開啟 Lab/Practices/   中的專案:「02-03-IntLiteralSize」。o 請修改原始碼,使用正確的 printf() 格式指定字,將整數、長整數、超長整數印出

來。o 請用 sizeof() 函數,計算整數、長整數、超長整數所霸佔的記憶體是多少 bytes?

並將它們印出。

Objective-C Programming  第 2  章 25

Page 26: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 26/73

Lab 02-03• 解答

Objective-C Programming  第 2  章 26

Page 27: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 27/73

小節整理• 本小節中,您已學會:

o 如何寫出不同進制、號數有無、不同長度的整數定數。o 如何使用正確的 printf() 格式指示字,將各種整數定數印出來。

Objective-C Programming  第 2  章 27

不同進制 號數有無 不同長度123

01230x123

123123u

123123L123LL

字首 特殊旗號 長度 字根

% #(無)一般整數l長整數ll 超長整數

d 有號十進位u無號十進位o無號八進位x無號十六進位

Page 28: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 28/73

浮點數定數

Objective-C Programming  第 2  章 28

Page 29: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 29/73

  依照大小來分

Objective-C Programming  第 2  章 29

1.23F 單精確度浮點數

1.23 雙精確度浮點數

1.23L 超長雙精確度浮點數

Page 30: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 30/73

  依照大小來分• 如何用 printf() 來顯示各種大小的浮點數?

Objective-C Programming  第 2  章 30

printf(“Float: %f \ n”, 1.23F);

printf(“Double: %f \ n”, 1.23);

printf(“Long Double: %Lf \ n”, 1.23L);

Page 31: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 31/73

  依照大小來分• 各種浮點數所佔記憶體大小

Objective-C Programming  第 2  章 31

1.23F(單精確度浮點數)

4 Bytes

1.23 (雙精確度浮點數) 8 Bytes

1.23L(超長雙精確度浮點數) 16 Bytes

Page 32: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 32/73

Lab 02-04• 目的

o 學會如何使用 %f、%Lf,正確顯示 float、double、long double。o 了解 float、double、long double  各佔多少記憶體。

•步驟o 請開啟 Lab/Practices/   中的專案: 「02-04-FloatLiteralSize」。o 修改原始碼,讓前三個 printf()  能順利印出 float、double、long double 。o 修改原始碼,讓後三個 printf()  能秀出 float、double、long double  各佔多少記憶

  體。

Objective-C Programming  第 2  章 32

Page 33: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 33/73

Lab 02-04• 解答

Objective-C Programming  第 2  章 33

Page 34: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 34/73

  依照表示法來分

Objective-C Programming  第 2  章 34

1.23 一般浮點數表示法

1.23e-10

科學記號表示法(1.23 x 10-10)

Page 35: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 35/73

  依照表示法來分• 如何用 printf() 來顯示各種大小的浮點數?

Objective-C Programming  第 2  章 35

printf(“Normal: %f \ n”, 1.23);

printf(“Scientific: %e \ n”, 1.23e-5);

Page 36: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 36/73

Lab 02-05• 目的

o 了解如何使用 %f、%e 正確顯示一般浮點數以及科學記號兩種表示法。

• 步驟o

請開啟 Lab/Practices/   中的專案: 「02-05-FloatLiteralNotation」。o 修改原始碼,讓原始碼中的前兩個 printf(),能正確顯示出一般浮點數,以及科學

  記號兩種表示法。o 修改原始碼,用後一個 printf(),把原來使用科學記號表示法的浮點數,以一般表

示法顯示出來。o 再將最後一個 printf()  中的「格式指定字(specifiers)」,改為「%12.8f」,再執

 行看看。o 請靜候講師講解 %12.8f  的意義。

Objective-C Programming  第 2  章 36

0 . 0 0 0 0 1 2 3 0

12

8

Page 37: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 37/73

Lab 02-05• 解答

Objective-C Programming  第 2  章 37

Page 38: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 38/73

浮點數以 0 與 1 表示• IEEE 754 格式(以最常用的「雙精確度」為例)

Objective-C Programming  第 2  章 38

 底數部份 – 48 bits(normalized mantissa)

 指數部份 – 14 bits(exponent)

 指數正負號 (Sign bit of exponent)

 底數正負號 (Sign bit of mantissa)

Page 39: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 39/73

浮點數以 0 與 1 表示• 浮點數正規化:將十進位浮點數,化為二進位的步驟

o 整數部分:化為二進位o 小數部分:化為二進位o 小數點:向左移動到第一個非零數字的左邊o 記下指數o 排入 IEEE 754 格式中

• 範例o (52.234375)10

= (110100.001111)2

= (0.110100001111)2 x 26

o IEEE 754 格式• 指數:00000000000110• 底數:000…00110100001111

• 結果:0000000000000110000…00110100001111

Objective-C Programming  第 2  章 39

老話一句:•  電腦只有 0 與 1• 怎麼解釋看自己

Page 40: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 40/73

小節整理• 本小節中,您已學會:

o 如何在 Objective-C  中,表示大小、表示法不同的浮點數。o 如何使用正確的「格式指定字」,用 printf()  印出大小、表示法不同的浮點數。o 了解浮點數也是用 0 與 1 表示出來的。

Objective-C Programming  第 2  章 40

大小不同 表示法不同

1.23F1.231.23L

1.231.23e-5

字首 總欄寬 小數位數 長度 字根

% 12 .8 L 超長f  單精、雙精e  科學記號

Page 41: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 41/73

文字定數

Objective-C Programming  第 2  章 41

Page 42: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 42/73

  種類

Objective-C Programming  第 2  章 42

文字定數

字元定數 字串定數

C  語言字串定數(SZ Format)

Objective-C 字串定數(NSString 格式)

Page 43: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 43/73

字元定數• 以大小來分

Objective-C Programming  第 2  章 43

„a‟一般字元定數• 規定之標準大小:至少 1 byte

• Mac 系統大小: 4 bytes

L„a‟

雙位元組字元定數

• 規定之標準大小:至少 2 byte• Mac 系統大小:4 bytes

Page 44: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 44/73

字元定數• 以表示法來分

Objective-C Programming  第 2  章 44

„a‟ 字元定數 (一般表示法)

„ \ 141‟字元定數(ASCII表示法)•  固定使用「八進位」表示

Page 45: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 45/73

字元定數• 特殊字元

o 又稱「轉義序列(Escape Sequence)」

Objective-C Programming  第 2  章 45

特殊字元 意義

„ \ n‟ New line,可讓游標在螢幕上換新的一列。„ \ t‟ Tab,可印出一個「定位點」,讓游標往後跳若干空間。

„ \ f‟ Form feed,可讓游標跳過本頁,由下一頁開始印字。

„ \ b‟ Backspace,可讓游標倒退一格,並消除一個字元。

„ \\ ‟

印出「 \ 」這個符號,因為「 \ 」被當成「轉義序列」的起始字元,想印出「 \ 」本身,就得連寫兩次。

Page 46: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 46/73

字元定數• 如何用 printf() 來列印各種字元定數?

o 一律用 %c !

Objective-C Programming  第 2  章 46

printf(“Char:  \ n”, );%c

„a‟

L„a‟

„ \ 141‟

Page 47: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 47/73

字元定數• 電腦底層如何用 0 與 1 來表示這些字元?

o 編碼法(Encoding):將文字編碼成數字,再以 0 與 1 表示這些數字。o 電腦世界常見的編碼法:

Objective-C Programming  第 2  章 47

ASCII

• American Standard Code for Information Interchange

(美國國家標準資訊交換碼)• 拉丁字母(歐美國家常用)•  寬度: 1 byte•  範例: „0‟(= 4810)、„A‟(= 6510)、„a‟(= 9710)、„ \ 141‟(=9710)

Big5• 大五碼:大千,倚天,國喬,零壹,精業• 繁體中文(台灣、香港常用)•  寬度: 2 bytes

•  範例:„乙‟ = 1010010001000001 (0xA441)

Unicode•  萬國碼(Universal Code)• 世界上所有字母(全世界通用)•  寬度:2 bytes(UTF-8、UTF-16)或 4 bytes(UTF-32)•  範例:„乙‟ = 1000111001011001(0x4E59)

老話一句:•  電腦只有 0 與 1• 怎麼解釋看自己

Page 48: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 48/73

字元定數• 關於 Unicode  的介紹

o 簡介• 1991 年 10 月發表。• 解決無法在同一頁面,顯示不同國家文字的困境(因:編碼法各自不同)。• 1999 年 9 月,納入 ISO-10646 標準。

o 編碼表示法• UCS-2 (Universal Character Set – 2 bytes)

o 一個字元以 2 bytes  儲存之,65536  種變化。o 以 U+hhhh(h 為一個 16 進位數字) 表示,如:U+4E59。o Objective-C 以 “ \uhhhh” ,如: “ \ u4e59” ,表示。o

已足夠涵蓋世界上常見語言的「常用字集」。• UCS-4 (Universal Character Set – 4 bytes)

o 一個字元以 4 bytes  儲存之,高達 42  億種變化以上。o 以 U+hhhhhhhh 表示之,如:U+7FFFFFFF。

Objective-C Programming  第 2  章 48

Page 49: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 49/73

字元定數• 關於 Unicode  的介紹

o 實作法:一些為了節省空間,所實作出來的方法• UTF-8(實作 UCS-2)

o Universal Transformation Format(通用轉換格式),一種 Unicode 「變寬編碼法」o 原 ASCII  使用 1 bytes  儲存(U+0000 ~ U+007F)。

(00000000 00000000 0zzzzzzz 0zzzzzzz (00-7F))o 拉丁文、希臘文、希伯來文阿拉伯文…  使用 2 bytes  儲存(U+0080 ~ U+07FF)。

(00000000 00000yyy yyzzzzzz 110yyyyy 10zzzzzz)o 中、日、韓(簡稱 CJK)漢字、字母,使用 3 bytes  儲存(U+0800 ~ U+FFFF)。

(00000000 xxxxyyyy yyzzzzzz 1110xxxx 10yyyyyy 10zzzzzz)o 其它字母使用 4 bytes  儲存(U+10000 ~ U+10FFFF)(000wwwxx xxxxyyyy yyzzzzzz 11110www 10xxxxxx 10yyyyyy 10zzzzzz)o 省空間,且相容於 ASCII 編碼,故最常用。

• UTF-16 (實作 UCS-2)o ASCII、拉丁文、希臘文、中日韓字集…等,一律使用 2 bytes  儲存(U+0000 ~ U+FFFF)。

(00000000 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx)o 其它字母使用 4 bytes  儲存(U+10000 ~ U+10FFFF)

(U+10FFFF – U+10000 = U+FFFFF 0000yyyy yyyyyyxx xxxxxxxx 110110yyyyyyyyyy 110111xxxxxxxxxx)

o 無法相容於 ASCII,需經過轉換,比較少用。

• UTF-32 (實作 UCS-4)o 一律使用 4 bytes  儲存所有字母,最標準的 Unicode 格式。o 除非想顯示罕用字、罕用語言、特殊符號…等,否則不太使用。

o Mac OS X  的 Unicode  實作法• 是 UTF-8  的變種,稱為 UTF-8-Mac。• 編碼方法承襲 UTF-8,但使用 4 bytes 來儲存每個字元。• 由於使用 4 bytes 來表示一個字元,將來擴充到 UTF-32   時會比較容易。

Objective-C Programming  第 2  章 49

Page 50: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 50/73

字元定數• Unicode 在 Objective-C 上的表示與列印

Objective-C Programming  第 2  章 50

printf(“Unicode: %s \ n”, “ \ u4e59”);

• 當然,也可以直接列印

printf(“Unicode: %s \ n”, “乙”);

線上求算「中文」與其「Unicode」: http://javawind.net/tools/native2ascii.jsp

Page 51: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 51/73

Lab 02-06• 目的

o 學會各種字元定數表示法。o 了解字元定數所佔的記憶體大小。

• 步驟o 請開啟 Lab/Practices/   中的專案: 「02-06-CharLiteral」。o 修改原始碼,使前五個 printf()  印出 „a‟、L‟a‟、„ \ 141‟、“ \ u4e59”、與 “乙”。o 修改原始碼,使後五個 printf()  印出 „a‟、L‟a‟、„ \ 141‟、“ \ u4e59”、與 “乙”  所佔有的

  記憶體大小。

Objective-C Programming  第 2  章 51

Page 52: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 52/73

Lab 02-06• 解答

Objective-C Programming  第 2  章 52

Page 53: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 53/73

字串定數

Objective-C Programming  第 2  章 53

“Hello” C語言字串定數

(SZ Format)

@“Hello”

Objective-C字串定數

(NSString Format)

Page 54: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 54/73

字串定數• 何謂「SZ Format」

o String ended with Zero Format。o C  語言原來就有的字串格式。

Objective-C Programming  第 2  章 54

“This is a book”

„T‟ „h‟ „i‟ „s‟ „i‟ „s‟ „a‟ „B‟ „o‟ „o‟ „k‟ „ \ 0‟

C語言辨認字串結束的方法看到一個零

Page 55: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 55/73

字串定數• 何謂「NSString」格式

o 是一種 Objective-C 物件(Objects)。o 包含「資料」以及操作資料的「函數」。

Objective-C Programming  第 2  章 55

NSString

“Hello”

length

UTF8StringlowercaseStringuppercaseString

Page 56: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 56/73

字串定數• 「NSString」物件內函數使用範例

o [@”Hello” length]

• 傳回字串 “Hello”  的長度,此處為 5。

o [@”Hello” UTF8String]

• 將 @”Hello” 字串物件,轉換為 C  語言的 SZ 格式傳回。

o [@”Hello” lowercaseString]

• 將字串轉成全部小寫,仍以 NSString 格式傳回。

o [@”Hello” uppercaseString]

• 將字串轉成全部大寫,仍以 NSString 格式傳回。

Objective-C Programming  第 2  章 56

Page 57: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 57/73

字串定數• 如何印出各種格式的字串定數?

Objective-C Programming  第 2  章 57

SZ Format:使用 printf(“%s”)

printf(“%s \ n”, “Hello”);

NSString Format:使用 NSLog(@“%@”)

NSLog(@“%@”, @“Hello”);

註:NSLog()有能力應付 NSString各種要求。建議只要牽涉到 NSString就使用之。%@會以人類能理解的樣子,印出所有物件的內容物。相當聰明的一個格式用字。

Page 58: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 58/73

Lab 02-07• 目的

o 了解在 Objective-C  中,如何表達兩種字串定數,並使用何種方式將它們印出。o 體驗將字串物件化後,能直接呼叫其內函數所帶來的方便性。

• 步驟o 請開啟 Lab/Practices/   中的專案: 「02-07-StringLiteral」。o 修改原始碼,讓 Line 7 / Line 8  中的 printf() 與 NSLog() 分別印出 “Hello” 以及

@”Hello” 這兩個字串定數。o 修改原始碼,嘗試使用 NSString 物件提供之函數,執行下列動作:

• 將 @“Hello”  的長度印出。

• 將 @“Hello”  由 NSString 格式,轉換為 SZ 格式。• 將 @“Hello” 全轉為大寫字母。• 將 @“Hello” 全轉為小寫字母。

Objective-C Programming  第 2  章 58

Page 59: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 59/73

Lab 02-07• 解答

Objective-C Programming  第 2  章 59

Page 60: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 60/73

小節整理• 本小節中,您已學會:

o 不同字元、字串的表示法,以及搭配的印出方法。o Unicode  的基本概念。包含能解釋 UCS-2 / UCS-4、UTF-8 / UTF-16 / UTF-32、

以及 UTF-8-Mac 等名詞。o 「物件 =  資料 +  操作函數」此一概念,並能簡單叫用 NSString  的函數。

Objective-C Programming  第 2  章 60

定數表示法 意義 搭配印出的方法

„a‟ 一般字元定數 printf(“%c”);

„ \ 141‟ 字元定數 – ASCII 表示法 printf(“%c”);

L„a‟ 雙字元定數 printf(“%c”);

“ \ u4e59” Unicode 字元定數 printf(“%s”);

“Hello” 字串定數 – SZ 格式 printf(“%s”);

@“Hello” 字串定數 – NSString 格式 NSLog(@“%@”);

Page 61: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 61/73

布林值定數

Objective-C Programming  第 2  章 61

Page 62: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 62/73

  何謂布林值• 僅包含「真(true)」、「假(false)」兩種值。• 由英國數學家 George Boole 提出。

Objective-C Programming  第 2  章 62

George Boole (1815 ~ 1864)

False

Page 63: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 63/73

布林值定數

Objective-C Programming  第 2  章 63

• true (源自 C語言)• TRUE(源自 C語言)

• YES (Objective-C創造)

• false (源自 C語言)

• FALSE(源自 C語言)• NO (Objective-C創造)

Page 64: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 64/73

布林值定數• 電腦如何用 0 與 1 來表示布林值?

Objective-C Programming  第 2  章 64

• true = TRUE = YES = 1•但所有「非零整數」,都會被視為「真」。

• sizeof(true) = sizeof(TRUE) = 4 bytes• sizeof(YES) = 1 byte

• false = FALSE = NO = 0•電腦以「零」,來代表「假」。

• sizeof(false) = sizeof(FALSE) = 4 bytes• sizeof(NO) = 1 byte

老話一句:•  電腦只有 0 與 1• 怎麼解釋看自己

Page 65: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 65/73

 如何印出布林值• 只能使用「整數」印出

Objective-C Programming  第 2  章 65

printf(“True: %d \ n”, true);

printf(“True: %d \ n”, TRUE);

printf(“True: %d \ n”, YES);

Page 66: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 66/73

Lab 02-08• 目的

o 練習 Objective-C  內,各種布林值定數的表示法。o 了解電腦如何用 0 與 1,來表示各種布林值變數。o 了解各種布林值定數各佔多少記憶體。

• 步驟o 請開啟 Lab/Practices/   中的專案: 「02-08-BoolLiteral」o 修改程式碼,讓前六個 printf()  印出布林值定數六種不同表示法。o 修改程式碼,讓後六個 printf()  印出六種布林值定數所佔的記憶體大小。

Objective-C Programming  第 2  章 66

Page 67: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 67/73

Lab 02-08• 解答

Objective-C Programming  第 2  章 67

Page 68: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 68/73

小節整理• 本小節中,您已學會:

o Objective-C  中,不同的布林值定數表示法、所佔記憶體大小、底層表達方法、以 及將它們印出的方法。

Objective-C Programming  第 2  章 68

布林值定數 記憶體大小 底層表達方式 列印方法true 4 bytes 1 printf(“%d”);

false 4 bytes 0 printf(“%d”);

TRUE 4 bytes 1 printf(“%d”);

FALSE 4 bytes 0 printf(“%d”);

YES 1 bytes 1 printf(“%d”);

NO 1 bytes 0 printf(“%d”);

Page 69: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 69/73

 總整理• 本章希望您學會的,是各種定數的:

o 表示法o 列印時的格式指定字o 佔用記憶體大小o 電腦底層的編碼方法

Objective-C Programming  第 2  章 69

整數定數 格式指定字 佔用記憶體 編碼方法

123 %d 4 二進位 / 二補數

0123 %o 4 二進位

0x123 %x 4 二進位

123u %u 4 二進位

123L %ld 4 二進位 / 二補數

123LL %lld 8 二進位 / 二補數

Page 70: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 70/73

 總整理

Objective-C Programming  第 2  章 70

浮點數定數 格式指定字 佔用記憶體 編碼方法

1.23F %f 4 IEEE 754

1.23 %f 8 IEEE 754

1.23L %Lf 16 IEEE 754

1.23e-5 %e 4 / 8 / 16 IEEE 754

Page 71: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 71/73

 總整理

Objective-C Programming  第 2  章 71

文字定數 格式指定字 佔用記憶體 編碼方法

„a‟ %c 4 ASCII / Unicode

„ \ 141‟ %c 4 ASCII

„ \ n‟, „ \ t‟, … %c 4 ASCII / Unicode

L„a‟ %c 4 ASCII / Unicode

“ \ u4e59” %s 4 Unicode

“Hello” %sN/A

(length, not size)SZ format

@“Hello”%@

(NSLog() only)N/A

(length, not size)NSString format

Page 72: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 72/73

 總整理

Objective-C Programming  第 2  章 72

布林值定數 格式指定字 佔用記憶體 編碼方法

true %d 4 1

false %d 4 0

TRUE %d 4 1

FALSE %d 4 0

YES %d 1 1

NO %d 1 0

Page 73: Objective-C 2.0 Programming: Literals

5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com

http://slidepdf.com/reader/full/objective-c-20-programming-literals 73/73