objective-c 2.0 programming: literals
DESCRIPTION
Instructor: Robert C. ChiCourse: Objective-C 2.0 ProgrammingChapter 2: LiteralsTRANSCRIPT
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]
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
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
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
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)
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
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 十六進位
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);
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
看不出是幾進位
看得出是幾進位
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
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
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 有號數
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);
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
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
????????----------------
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
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
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
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
「二補數」
都可以!
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
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
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
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);
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()固定傳回「無號長整數」
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
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
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無號十六進位
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
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 超長雙精確度浮點數
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);
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
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
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
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)
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);
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
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
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)
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• 怎麼解釋看自己
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 科學記號
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
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 格式)
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
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表示法)• 固定使用「八進位」表示
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,可讓游標倒退一格,並消除一個字元。
„ \\ ‟
印出「 \ 」這個符號,因為「 \ 」被當成「轉義序列」的起始字元,想印出「 \ 」本身,就得連寫兩次。
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‟
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• 怎麼解釋看自己
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
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
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
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
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
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)
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語言辨認字串結束的方法看到一個零
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
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
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就使用之。%@會以人類能理解的樣子,印出所有物件的內容物。相當聰明的一個格式用字。
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
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
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(@“%@”);
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
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
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創造)
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• 怎麼解釋看自己
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);
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
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
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”);
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 二進位 / 二補數
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
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
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
5/9/2018 Objective-C 2.0 Programming: Literals - slidepdf.com
http://slidepdf.com/reader/full/objective-c-20-programming-literals 73/73