OC 中的BOOL與bool的區(qū)別

1.BOOL與bool的區(qū)別

  • bool 是0和1 分別對(duì)應(yīng) -> false/true
  • BOOL 是0和非0(-256~255除0外) 分別對(duì)應(yīng)->NO/YES
bool boolA = 1;
bool boolB = 0;
bool boolC = 256;
bool boolD = -1;
bool boolE = 13;


BOOL BOOLA = 1;
BOOL BOOLB = 0;
BOOL BOOLC = 256;
BOOL BOOLD = -1;
BOOL BOOLE = 13;


NSLog(@"boolA = %d",boolA);
NSLog(@"boolB = %d",boolB);
NSLog(@"boolC = %d",boolC);
NSLog(@"boolD = %d",boolD);
NSLog(@"boolE = %d",boolE);

NSLog(@"===========");

NSLog(@"BOOLA = %d",BOOLA);
NSLog(@"BOOLB = %d",BOOLB);
NSLog(@"BOOLC = %d",BOOLC);
NSLog(@"BOOLD = %d",BOOLD);
NSLog(@"BOOLE = %d",BOOLE);

結(jié)果輸出為:

boolA = 1  // true
boolB = 0  // false
boolC = 1  // true
boolD = 1  // true
boolE = 1  // true
===========
BOOLA = 1  // YES
BOOLB = 0  // NO
BOOLC = 0  // NO
BOOLD = -1  // YES
BOOLE = 13  // YES

由以上結(jié)果可看出:bool的結(jié)果只有兩個(gè):0和1。除了0是0阔籽,其他任意數(shù)字都是1,沒(méi)有大小限制。
BOOL的范圍為8位二進(jìn)制數(shù)字墓猎,如果超出了8位缸兔,就截取后8位鲸匿。當(dāng)8個(gè)位置上都為0時(shí),返回0剧辐,所以0會(huì)返回0,256會(huì)返回0邮府,但是257會(huì)返回1荧关,因?yàn)橹唤厝『?位。


2.使用事項(xiàng)

  • bool
    Introduced to standard C in the C99 spec. (The C99 standard was published in 1999, but it took some years after that to become widespread in use.) Prior to that, "plain" C had no built-in Boolean type, so libraries that built on top of C often defined their own. (And often continued using their own types for source/binary compatibility even after they embraced C99 compilers.)
    Use this if you're writing ISO C and aren't working in the context of higher level libraries with their own Boolean types.

  • Boolean
    Defined by Carbon (the early-OSX-days compatibility bridge from the even older Mac Toolbox), which you might still see in some projects (due to transitive #include of headers that are really only around for compatibility with really old source code).
    Don't use this.

  • BOOL
    Defined by ObjC because NeXTSTEP needed its own Boolean type back in 1988. (The oldest objc.h I can find on my office bookshelf dates to 1992 and includes a definition of BOOL.)
    ObjC BOOL has often been defined as typedef signed char, meaning that it can hold more values than just YES (1) and NO (0). That can be a problem if you aren't careful. (Why even do that? Because if a type is one bit wide, it's hard to pack into well-aligned memory for good performance.)
    However, in iOS 64-bit (including tvOS) and watchOS, the compiler defines OBJC_BOOL_IS_BOOL, which makes ObjC BOOL just an alias for C99 bool. That means the language/compiler ensures that nonzero values are always stored as 1, so you don't have the issues that come from typedef signed char BOOL. (Still gotta worry about them on macOS or 32-bit iOS, though.)

  • TLDR
    If you're working in ObjC with ObjC frameworks (like Cocoa, UIKit, etc), you should use BOOL for consistency with the APIs you're interacting with. (Besides, YES and NO are much louder than true and false, and it's good to be emphatic when you're talking about absolute truth, right?)

DO NOT COMPARE TO YES

在條件判斷語(yǔ)句中褂傀,不要直接使用x == YES忍啤,或x != YES這種寫法


而要直接使用if (hasXXX) 或 if (isXXX) 這種寫法

還有就是避免將大于一個(gè)字節(jié)(8位二進(jìn)制)的值賦值給BOOL類型的變量,如BOOL a = 256

參考:
BOOL’s sharp corners
[Objc 中 “== YES” 的愚蠢行為有多可怕]
(http://www.reibang.com/p/75b88d2a0380)
is-there-any-difference-between-bool-boolean-and-bool-in-objective-c
iOS中BOOL跟bool的區(qū)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市同波,隨后出現(xiàn)的幾起案子鳄梅,更是在濱河造成了極大的恐慌,老刑警劉巖未檩,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戴尸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡冤狡,警方通過(guò)查閱死者的電腦和手機(jī)孙蒙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悲雳,“玉大人挎峦,你說(shuō)我怎么就攤上這事『掀埃” “怎么了坦胶?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)歪玲。 經(jīng)常有香客問(wèn)我迁央,道長(zhǎng),這世上最難降的妖魔是什么滥崩? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任岖圈,我火速辦了婚禮,結(jié)果婚禮上钙皮,老公的妹妹穿的比我還像新娘蜂科。我一直安慰自己,他們只是感情好短条,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布导匣。 她就那樣靜靜地躺著,像睡著了一般茸时。 火紅的嫁衣襯著肌膚如雪贡定。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天可都,我揣著相機(jī)與錄音缓待,去河邊找鬼。 笑死渠牲,一個(gè)胖子當(dāng)著我的面吹牛旋炒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播签杈,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瘫镇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起铣除,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谚咬,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后通孽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體序宦,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年背苦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了互捌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡行剂,死狀恐怖秕噪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厚宰,我是刑警寧澤腌巾,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站铲觉,受9級(jí)特大地震影響澈蝙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撵幽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一灯荧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盐杂,春花似錦逗载、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至强衡,卻和暖如春擦秽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漩勤。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工号涯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锯七。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像誉己,于是被迫代替她去往敵國(guó)和親眉尸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 起因 在技術(shù)群里發(fā)現(xiàn)有人在問(wèn) 這一段會(huì)輸出什么,問(wèn)這個(gè)的原因是他看到博客上都說(shuō)是輸出a no b yes噪猾,但是自己...
    Sunli_閱讀 4,422評(píng)論 1 9
  • OC中的BOOL類型占用了一個(gè)字節(jié)霉祸,即是8位進(jìn)行表示。8位全是0時(shí)即是NO袱蜡,8位之內(nèi)非0的就是YES丝蹭,如果整數(shù)超過(guò)...
    Idoahc閱讀 3,810評(píng)論 3 5
  • 0 前言 5月8日提交的代碼在服務(wù)端編譯出現(xiàn)了錯(cuò)誤,而本機(jī)編譯過(guò)程中沒(méi)有任何問(wèn)題坪蚁。定位到錯(cuò)誤日志奔穿,發(fā)現(xiàn)是因?yàn)殄e(cuò)把函...
    xohozu閱讀 10,246評(píng)論 2 6
  • 首先要理清一下關(guān)系: HTML:一些網(wǎng)頁(yè)控件。 超文本標(biāo)記語(yǔ)言敏晤,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言(SGM或SGML)下的一個(gè)應(yīng)用贱田。...
    goyohol閱讀 736評(píng)論 0 1
  • 曾經(jīng)的我們,已不是現(xiàn)在的我們嘴脾,都為了各自的生活奔波男摧,懷念那是的我們,一起瘋译打,一起笑耗拓,一起哭!同為對(duì)方加油奏司,有心事會(huì)...
    唯伊楓葉閱讀 439評(píng)論 0 0