轉載:http://blog.csdn.net/tanhj/article/details/72526901
1. 數據類型簡介及輸出
(1) 數據類型簡介
數據類型簡介 : Object - C 數據類型 分為 基本數據類型, 構造類型 和 指針類型;
-- 基本數據類型 : 整型, 字符型, 浮點型 (float 和 double), 枚舉型;
-- 構造類型 : 數組類型, 結構體類型, 共用體類型;
-- 指針類型 : 最終要的數據類型,
所有的系統類, 自定義類都是指針;
-- 空類型 : 空類型只有一個值 nil, 該類型沒有名稱, 因此沒有空類型的變量, 變量不能轉換成空類型, 但是空類型可以轉換成任何引用類型;
(2) 數據類型輸出
NSLog()簡介 : NSLog 是 Foundation 框架中功能強大的函數, 可以輸出任何類型的數據;
-- 占位符 : NSLog() 函數中各式與 C 語言中大致相似, 第一個參數是加了 @ 的字符串, 后面的參數是用于替換占位符的;
整型占位符說明 :
-- %d : 十進制整數, 正數無符號, 負數有 "-" 符號;
-- %o : 八進制無符號整數, 沒有 0 前綴;
-- %x : 十六進制無符號整數, 沒有 0x 前綴;
-- %u : 十進制無符號整數;
--
%zd
NSInteger
--
**%tu **
無符號NSUInteger
字符占位符說明 :
-- %c : 單個字符輸出;
-- %s : 輸出字符串;
浮點占位符說明 :
-- %f : 以小數形式輸出浮點數, 默認 6 位小數;
-- %e : 以指數形式輸出浮點數, 默認 6 位小數;
-- %g : 自動選擇 %e 或者 %f 各式;
其它形式占位符 :
-- %p : 輸出十六進制形式的指針地址;
-- %@ : 輸出 Object-C 對象;
占位符附加字符 :
-- l : 在整型 和 浮點型占位符之前, %d %o %x %u %f %e %g 代表長整型 和 長字符串;
-- n(任意整數) : %8d 代表輸出8位數字, 輸出總位數;
-- .n : 浮點數 限制小數位數 , %5.2f 表示 5位數字 2位小數, 字符串 截取字符個數 ;
-- - : 字符左對齊;
示例代碼 :
[objc] view plain copy
#import <Foundation/Foundation.h>
int main(int argc, charchar **argv)
{
@autoreleasepool{
int a = 38;
long b = 38;
double c = 3.8;
double d = 2.3;
charchar * oct_c = "Octopus";
NSString *oct_oc = @"Octopus"; /* 定義字符串, 在字符串前加上 @ 說明是Ovject-C變量, 值賦給一個 NSString 指針 */
NSDate *date = [[NSDate alloc]init];
NSLog(@"%d 十進制整型", a);
NSLog(@"%5d 五位十進制整型", a);
NSLog(@"%-5d 左對齊的五位十進制整型", a);
NSLog(@"%o 八進制整型", a);
NSLog(@"%x 十六進制整型\n", a);
NSLog(@"%ld 長整型", b);
NSLog(@"%lx 十六進制長整型\n", b);
NSLog(@"%f 小數形式輸出浮點數", c);
NSLog(@"%e 指數形式輸出浮點數", c);
NSLog(@"%g 以最簡短形式輸出浮點數", c);
NSLog(@"%5f 以五位小數形式輸出浮點數", c);
NSLog(@"%5.3f 小數行書輸出, 一共五位, 小數3位\n", c);
NSLog(@"%lf 小數形式輸出長浮點數", d);
NSLog(@"%le 指數形式輸出長浮點數", d);
NSLog(@"%lg 以最短形式輸出長浮點數", d);
NSLog(@"%5lf 5位小數形式輸出長浮點數", d);
NSLog(@"%5.3lf 5位小數形式輸出長浮點數, 其中3位是小數\n", d);
NSLog(@"%s 輸出C字符串", oct_c);
NSLog(@"%@ 輸出Object-C字符串\n", oct_oc);
NSLog(@"%@ 輸出日期", date);
}
}
執行結果 :
octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 02-NSLogDemo.m
octopus-2:ios octopus$
octopus-2:ios octopus$ ./a.out
2014-08-16 19:32:44.210 a.out[1300:507] 38 十進制整型
2014-08-16 19:32:44.212 a.out[1300:507] 38 五位十進制整型
2014-08-16 19:32:44.213 a.out[1300:507] 38 左對齊的五位十進制整型
2014-08-16 19:32:44.214 a.out[1300:507] 46 八進制整型
2014-08-16 19:32:44.214 a.out[1300:507] 26 十六進制整型
2014-08-16 19:32:44.215 a.out[1300:507] 38 長整型
2014-08-16 19:32:44.215 a.out[1300:507] 26 十六進制長整型
2014-08-16 19:32:44.216 a.out[1300:507] 3.800000 小數形式輸出浮點數
2014-08-16 19:32:44.216 a.out[1300:507] 3.800000e+00 指數形式輸出浮點數
2014-08-16 19:32:44.217 a.out[1300:507] 3.8 以最簡短形式輸出浮點數
2014-08-16 19:32:44.217 a.out[1300:507] 3.800000 以五位小數形式輸出浮點數
2014-08-16 19:32:44.218 a.out[1300:507] 3.800 小數行書輸出, 一共五位, 小數3位
2014-08-16 19:32:44.218 a.out[1300:507] 2.300000 小數形式輸出長浮點數
2014-08-16 19:32:44.219 a.out[1300:507] 2.300000e+00 指數形式輸出長浮點數
2014-08-16 19:32:44.219 a.out[1300:507] 2.3 以最短形式輸出長浮點數
2014-08-16 19:32:44.219 a.out[1300:507] 2.300000 5位小數形式輸出長浮點數
2014-08-16 19:32:44.220 a.out[1300:507] 2.300 5位小數形式輸出長浮點數, 其中3位是小數
2014-08-16 19:32:44.220 a.out[1300:507] Octopus 輸出C字符串
2014-08-16 19:32:44.220 a.out[1300:507] Octopus 輸出Object-C字符串
2014-08-16 19:32:44.226 a.out[1300:507] 2014-08-16 11:32:44 +0000 輸出日期
2. 整型
(1) 整型類型介紹
四種整型 :
-- short int : 短整型, 占16位, mac 上占 2 字節, iOS 上占 2 字節, 范圍 -32768(-2^15) ~ 32767(2^15 - 1), 3萬;
-- int : 整型, 占32位, mac 上占 4 字節, ios 上占 4 字節, 范圍 -2147483648(-2^31) ~ 2147483647(2^31 - 1), 21億;
-- long int : 長整型, 占64位, mac 上占 8 字節, ios 上占 4 字節, (-2^63) ~ (2^63 - 1), 922億億;
-- long long : 占64位, mac 上占 8 字節, ios 上占 8 字節;
整數賦值 : 整型賦值時注意范圍, 如果超出賦值范圍, 會出現警告, 數據也會丟失;
-- 示例程序 :
/*************************************************************************
File Name: a.m
Author: octopus
Mail: [octopus_truth.163.com](http://octopus_truth.163.com/)
Created Time: 日 8/17 00:44:19 2014
************************************************************************/
#import <Foundation/Foundation.h>
int main(int argc, charchar * argv[])
{
@autoreleasepool {
short int a = 50000; /* short int 范圍是 正負3萬, 因此超出范圍報錯 */
int a = 50000;
NSLog(@"short int a = %d", a);
NSLog(@"int a = %d", a);
}
}
-- 執行結果 :
octopus-2:~ octopus$ clang -fobjc-arc -framework Foundation a.m
a.m:14:7: error: redefinition of 'a' with a different type: 'int' vs 'short'
int a = 50000;
^
a.m:13:13: note: previous definition is here
short int a = 50000;
^
1 error generated.
(2) 進制介紹
八進制 十六進制賦值 : 八進制由 "0" 開頭, 十六進制由 "0x" 或者 "0X" 開頭;
-- 示例程序 :
#import <Foundation/Foundation.h>
int main(int argc, charchar **argv)
{
@autoreleasepool
{
int a = 010; /* 八進制賦值 */
int b = 0x10; /* 十六進制賦值 */
int c = 10; /* 正常十進制賦值 */
NSLog(@"a = %d", a);
NSLog(@"b = %d", b);
NSLog(@"c = %d", c);
NSLog(@". . . . . ");
NSLog(@"a = %o", a);
NSLog(@"b = %x", b);
}
return 0;
}
-- 執行結果 :
1. octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 03-IntDemo1.m
2. octopus-2:ios octopus$ ./a.out
3. 2014-08-17 00:58:50.513 a.out[1726:507] a = 8
4. 2014-08-17 00:58:50.516 a.out[1726:507] b = 16
5. 2014-08-17 00:58:50.516 a.out[1726:507] c = 10
6. 2014-08-17 00:58:50.516 a.out[1726:507] . . . . .
7. 2014-08-17 00:58:50.517 a.out[1726:507] a = 10
8. 2014-08-17 00:58:50.517 a.out[1726:507] b = 10
(3) 無符號整型
無符號整型 : 無符號整型 第一位 不是符號位, 范圍比原來要大, 例如 short int 范圍是 正負3萬, unsigned short int 范圍是 0到6萬, 將5萬賦值給 該類型不報錯;
-- 示例程序 :
[objc] view plain copy
/*************************************************************************
File Name: 03-IntDemo2.m
Author: octopus
Mail: octopus_truth.163.com
Created Time: 日 8/17 01:02:39 2014
************************************************************************/
-
import <Foundation/Foundation.h>
-
int
main(
**int**
argc,
**char**
**char**
* argv[])
{
-
@autoreleasepool
{
unsigned
**short**
**int**
a =
5
0
0
0
0
;
- NSLog(
@"a = %d"
, a);
}
}
-- 執行結果 :
[plain] view plain copy
octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 03-IntDemo2.m
octopus-2:ios octopus$ ./a.out
2014-08-17 01:03:35.508 a.out[1745:507] a = 50000
<a name="t7" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a><a target="_blank" name="t7" id="t7" style="box-sizing: border-box; background: transparent; color: rgb(255, 153, 0); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>
3. 字符型
字符型數據簡介 :
-- 單個字符表示 : 使用 '' 將單個字符引起來, 便是字符常量, 如 'a', 'b' 等;
-- 轉義字符表示 : 使用轉義符號 \ 來指定字符, 如 '\n' 等;
-- 字符占用空間大小 : 每個字符占用一個字節, 因此 Object-C 不支持中文字符, 因為中文字符都是占 2 ~ 3 個字節;
轉義字符 : 分為特殊空白字符 和 區別 單雙引號 和 反斜線的轉義;
-- 退格符 : '\b' ;
-- 換行符 : '\n' ;
-- 回車符 : '\r' ;
-- 制表符 : '\t' ;
-- 雙引號 : '"' ;
-- 單引號 : ''' ;
-- 反斜線 : '\' ;
int 與 char 類型關系 : char 類型可以當做 8 位無符號整數, 取值范圍 0 ~ 255;
-- int 賦值給 char : 將 int 類型賦值給 char 變量的時候, 會自動將類型轉為 char 類型;
char 類型 示例 :
[objc] view plain copy
/*************************************************************************
File Name: 05-charDemo.m
Author: octopus
Mail: octopus_truth.163.com
Created Time: 二 8/19 21:10:37 2014
************************************************************************/
-
import <Foundation/Foundation.h>
-
int
main(
**int**
argc,
**char**
**char**
* argv[])
{
-
@autoreleasepool
{
-
char
a =
'a'
;
-
char
b =
1
0
0
;
-
char
c =
'\n'
;
- NSLog(
@"a = %d"
, a);
- NSLog(
@"b = %c"
, b);
- NSLog(
@"c = %d"
, c);
}
}
執行結果
:
[plain] view plain copy
octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 05-charDemo.m
octopus-2:ios octopus$ ./a.out
2014-08-19 21:13:24.815 a.out[441:507] a = 97
2014-08-19 21:13:24.816 a.out[441:507] b = d
2014-08-19 21:13:24.817 a.out[441:507] c = 10
<a name="t8" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a><a target="_blank" name="t8" id="t8" style="box-sizing: border-box; background: transparent; color: rgb(255, 153, 0); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>
4. 浮點型
浮點型數據類型 :
-- float : 占 4 字節;
-- double : 占 8 字節;
-- long double : 占 16 字節;
浮點數表示形式 :
-- 十進制形式 : 簡單的浮點數, 包含一個小數點, 如 3.8, 38.0, .38 等;
-- 科學計數法 : 3.8E2 或者 3.8e2 代表 3.8*10^2, 只有浮點數才能使用科學計數法;
Object-C 與 Java 浮點數區別 :
-- Java 浮點數 : Java 的 double 與 float 不同, 浮點數賦值給 float 需要加上 f 后綴;
-- Object-C浮點數 : 不區分 double 與 float, 一個浮點數 3.8 可以賦值給兩種類型的變量;
浮點數的特殊值 :
-- 正無窮大 : 正浮點數除以 0.0 得到正無窮大, 正無窮大都相等, 正整數除以 0.0 得到整數的邊界值, short int 除以 0.0 得到 32767(2^15 -1);
-- 負無窮大 : 負浮點數除以 0.0 得到負無窮大, 負無窮大都相等, 負整數除以 0.0 得到整數的邊界值, short int 除以 0.0 得到 -32768(2^15);
-- 非數 : 0.0 除以 0.0 得到一個非數, 非數與任何數包括其本身都不相等;
代碼示例 :
[objc] view plain copy
/*************************************************************************
File Name: 06-floatDemo.m
Author: octopus
Mail: octopus_truth.163.com
Created Time: 三 8/20 01:08:35 2014
************************************************************************/
-
import <Foundation/Foundation.h>
-
int
main(
**int**
argc,
**char**
**char**
* argv[])
{
-
@autoreleasepool
{
/* 定義的10位的小數, 使用10位 %g 格式輸出, 結果 float 只能接收6位小數 */
-
float
a =
3
.888888888
;
- NSLog(
@"a = %10g"
, a);
/* double 類型也只能接收6位有效值 */
-
double
b =
3
8
8
.8888888
;
- NSLog(
@"b = %10g"
, b);
- NSLog(
@"5.0 / 0.0 = %g"
,
5
.0
/
0
.0
);
- NSLog(
@"正無窮大對比結果 = %d"
,
5
.0
/
0
.0
==
5
0
0
/
0
.0
);
-
double
feiNum =
0
.0
/
0
.0
;
- NSLog(
@"0.0 / 0.0 = %g"
, feiNum);
- NSLog(
@"非數對比結果 = %d"
, feiNum == feiNum);
/* 獲取邊界 */
-
int
bound
1
=
5
/
0
.0
;
-
int
bound
2
= -
5
/
0
.0
;
- NSLog(
@"正邊界 = %d, 負邊界 = %d"
, bound
1
, bound
2
);
}
}
--
執行效果
:
[plain] view plain copy
octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 06-floatDemo.m
octopus-2:ios octopus$ ./a.out
2014-08-20 01:22:22.712 a.out[776:507] a = 3.88889
2014-08-20 01:22:22.714 a.out[776:507] b = 388.889
2014-08-20 01:22:22.714 a.out[776:507] 5.0 / 0.0 = inf
2014-08-20 01:22:22.714 a.out[776:507] 正無窮大對比結果 = 1
2014-08-20 01:22:22.715 a.out[776:507] 0.0 / 0.0 = nan
2014-08-20 01:22:22.715 a.out[776:507] 非數對比結果 = 0
2014-08-20 01:22:22.715 a.out[776:507] 正邊界 = 2147483647, 負邊界 = -2147483648
-- 注意情況 : 不能將 5/0.0 直接以 %d 形式打印, 否則會報以下錯誤;
[plain] view plain copy
octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 06-floatDemo.m
06-floatDemo.m:29:44: warning: format specifies type 'int' but the argument has type 'double' [-Wformat]
NSLog(@"正邊界 = %d, 負邊界 = %d", 5/0.0, -5/0.0);
~~ ^~~~~
%f
06-floatDemo.m:29:51: warning: format specifies type 'int' but the argument has type 'double' [-Wformat]
NSLog(@"正邊界 = %d, 負邊界 = %d", 5/0.0, -5/0.0);
~~ ^~~~~~
%f
2 warnings generated.
<a name="t9" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a><a target="_blank" name="t9" id="t9" style="box-sizing: border-box; background: transparent; color: rgb(255, 153, 0); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>
5. 枚舉類型
<a name="t10" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a><a target="_blank" name="t10" id="t10" style="box-sizing: border-box; background: transparent; color: rgb(255, 153, 0); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>
(1) 定義普通枚舉
定義方式 : 格式 enum enum_name {elem1, elem2, elem3 ...} ;
-- 示例 : enum day{Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
定義枚舉變量 : 格式 enum enum_name var1, var2 ;
-- 示例 : enum day today, tomorrow, 注意 today tomorrow 兩個變量的取值只能是 day 枚舉中定義的值;
枚舉變量賦值 : 格式 variable = elm1 ;
-- 示例 : today = Sunday; tomorrow = Friday;
<a name="t11" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a><a target="_blank" name="t11" id="t11" style="box-sizing: border-box; background: transparent; color: rgb(255, 153, 0); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>
(2) 定義匿名枚舉
匿名枚舉格式 : enum {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday} today, tomorrow ;
-- 說明 : 兩個枚舉變量 today 和 tomorrow 只能取值 enum 中得枚舉值;
<a name="t12" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a><a target="_blank" name="t12" id="t12" style="box-sizing: border-box; background: transparent; color: rgb(255, 153, 0); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>
(3) 枚舉值簡介
枚舉值常量 : 在 {} 中得是枚舉常量 或者 枚舉元素, 該元素不是變量, 不能對齊進行賦值, 枚舉的值按照定義的順序 0, 1, 2, 3 以此類推;
枚舉值本質 : 枚舉值屬于無符號整數, 可以使用 %u 占位符打印出來, 其值也能進行大小比較, 和四則運算;
枚舉初值 : 枚舉值可以在定義的時候賦予一個初值;
<a name="t13" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a><a target="_blank" name="t13" id="t13" style="box-sizing: border-box; background: transparent; color: rgb(255, 153, 0); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>
(4) 枚舉示例
示例程序 :
[objc] view plain copy
/*************************************************************************
File Name: 07-enumDemo.m
Author: octopus
Mail: octopus_truth.163.com
Created Time: 四 8/21 21:36:09 2014
************************************************************************/
-
import <Foundation/Foundation.h>
-
int
main(
**int**
argc,
**char**
**char**
* argv[])
{
-
@autoreleasepool
{
/* 定義一個枚舉 */
-
enum
day {Sunday =
6
, Monday =
2
, Tuesday, Wednesday, Thursday, Friday, Saturday};
/* 定義枚舉變量 */
-
enum
day today, tomorrow;
/* 為枚舉變量賦值 */
today = Wednesday;
tomorrow = Thursday;
/* 打印枚舉值 */
NSLog(
@"today = %u"
, today);
- NSLog(
@"tomorrow = %u"
, tomorrow);
-
enum
{alive, die} state;
state = alive;
NSLog(
@"state = %d"
, state);
}
}
執行結果
:
[plain] view plain copy
octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 07-enumDemo.m
octopus-2:ios octopus$ ./a.out
2014-08-21 21:49:01.414 a.out[664:507] today = 4
2014-08-21 21:49:01.416 a.out[664:507] tomorrow = 5
2014-08-21 21:49:01.416 a.out[664:507] state = 0
<a name="t14" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a><a target="_blank" name="t14" id="t14" style="box-sizing: border-box; background: transparent; color: rgb(255, 153, 0); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>
6. 布爾型數據
BOOL 類型簡介 :
-- BOOL 類型值 : 該類型至右兩個值 YES 和 NO ;
-- BOOL 類型本質 : 該類型本質是 signed char, YES 是 1 , NO 是 0 , 在處理的時候 YES 會被當成真處理 , NO 會被當成假處理 ;
定義 BOOL 類型的系統源碼 :
[objc] view plain copy
-
define OBJC_BOOL_DEFINED
/// Type to represent a boolean value.
-
typedef
signed
char
BOOL
;
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C"
// even if -funsigned-char is used.
-
if __has_feature(objc_bool)
-
define YES __objc_yes
-
define NO __objc_no
-
else
-
define YES ((BOOL)1)
-
define NO ((BOOL)0)
-
endif
代碼示例
:
[objc] view plain copy
/*************************************************************************
File Name: 08-boolDemo.m
Author: octopus
Mail: octopus_truth.163.com
Created Time: 二 8/26 00:29:58 2014
************************************************************************/
-
import <Foundation/Foundation.h>
/* 判斷 a 是否大于 b */
-
BOOL
isBig(
**int**
a,
**int**
b)
{
if
(a > b)
{
return
**YES**
;
}
return
**NO**
;
}
-
int
main(
**int**
argc,
**char**
**char**
* argv[])
{
-
@autoreleasepool
{
-
int
a =
5
;
-
int
b =
3
;
- NSLog(
@"a 是否大于 b : %d"
, isBig(a, b));
-
BOOL
c =
1
;
-
BOOL
d =
2
;
- NSLog(
@"c = %d"
, c);
- NSLog(
@"d = %d"
, d);
}
}
執行結果
:
[objc] view plain copy
-
octopus-
2
:ios octopus$ clang -fobjc-arc -framework Foundation
0
8
-boolDemo
.m
-
octopus-
2
:ios octopus$ ./a
.out
-
2
0
1
4
0
8
2
6
00
:
4
0
:
4
8
.928
a
.out
[
1
7
5
8
:
5
0
7
] a 是否大于 b :
1
-
2
0
1
4
0
8
2
6
00
:
4
0
:
4
8
.930
a
.out
[
1
7
5
8
:
5
0
7
] c =
1
-
2
0
1
4
0
8
2
6
00
:
4
0
:
4
8
.931
a
.out
[
1
7
5
8
:
5
0
7
] d =
2
BOOL 類型賦值
:
-- BOOL 類型判斷 : BOOL 類型會將非 0 數字當做 YES 處理;
-- 大數字賦值 : 注意 BOOL 類型只有 8 位, 賦值的時候, 只要最后8位不為0, 那么 BOOL 類型就是 YES, 如果后 8 位為0, 那么 BOOL 為 NO;
-- 示例代碼 :
[objc] view plain copy
/*************************************************************************
File Name: 08-boolDemo1.m
Author: octopus
Mail: octopus_truth.163.com
Created Time: 二 8/26 00:48:05 2014
************************************************************************/
-
import <Foundation/Foundation.h>
-
int
main(
**int**
argc,
**char**
**char**
* argv[])
{
-
@autoreleasepool
{
-
BOOL
a =
2
5
6
;
-
BOOL
b =
5
1
2
;
- NSLog(
@"a = %d"
, a);
- NSLog(
@"b = %d"
, b);
}
}
--
編譯警告
:
[objc] view plain copy
-
octopus-
2
:ios octopus$ clang -fobjc-arc -framework Foundation
0
8
-boolDemo
1
.m
-
0
8
-boolDemo
1
.m
:
1
3
:
1
2
:
warning
: implicit conversion from
'int'
to
'BOOL'
(aka
'signed char'
) changes value from
2
5
6
to
0
[-Wconstant-conversion]
-
BOOL
a =
2
5
6
;
~ ^~~
-
0
8
-boolDemo
1
.m
:
1
4
:
1
2
:
warning
: implicit conversion from
'int'
to
'BOOL'
(aka
'signed char'
) changes value from
5
1
2
to
0
[-Wconstant-conversion]
-
BOOL
b =
5
1
2
;
~ ^~~
-
2
warnings generated.
--
執行結果
:
[objc] view plain copy
-
octopus-
2
:ios octopus$ ./a
.out
-
2
0
1
4
0
8
2
6
00
:
5
0
:
0
0
.705
a
.out
[
1
8
0
2
:
5
0
7
] a =
0
-
2
0
1
4
0
8
2
6
00
:
5
0
:
0
0
.708
a
.out
[
1
8
0
2
:
5
0
7
] b =
0