object c中非零不一定是yes

2021-06-18 01:07:01 字數 1264 閱讀 1567

object-c中的布林型別: 中的布林型別: 早期的 c 語言中是沒有布林型別的(c99 增加了布林型別) ,object-c中增加 bool 型別來表 示yes、no,注意不是 true、false。

bool 使用了乙個 8 位(乙個位元組)的整數進行表示, 8 位全0就是 no。

我們知道 c 語言中非0值即為邏輯真, 因此常常會有inti=5;while(i)的寫法。

object-c在 中一定要注意慎用 c 語言中的這種數字與邏輯真假混合對待的做法去操作 bool 型別變數。

例如: bool bi=8960; if(bi==yes) 這裡會輸出yes嗎?不會的。

為什麼呢?8960是非0值,它不是邏輯真嗎?

還記得上面說 過 bool 是乙個 8 位的整數嗎?

因為 8960用二進位制表示是大於8 位的, 也就是說高位無效, 只保留 8960的低八位,8960的低八位恰好全都是0,因此 bi 就是 no 了。

因此在object-c中一定要注意這個問題,非零值未必是 bool 的yes,但是0一定是 no。

所以有 c 語言程式設計經驗的,最好不要把 bool 與整數摻合在一起作為布林型別的判斷,可能 c 語言的開發者認為直接用數字作為布林值進行判斷在寫法上更為簡潔。

bool b = 8960;

if (b) else

if (8960) else

2013-08-22 15:39:24.443 listdemo[9660:11303] no

2013-08-22 15:39:24.444 listdemo[9660:11303] yes

object-c中非零不一定是yes

| 掌中天際

能人不一定是好領導

在工作中,許多大家公認的聰明能幹的人被提拔為領導。但有相當一部分人沒成為好領導,還有的人在領導崗位上非常失敗。下面,剖析一下失敗的原因 一 特能幹的領導。有的領導確實特別有本事,在本單位中,十八般武藝,樣樣精通,是不可多得的全才。由於自己特能幹,就經常看不慣別人幹的活,口頭語 你這樣幹的不行 看我怎...

路不一定是死的

前段時間給樓下座報表開發,asp.net2.0,客戶有乙個需求,就是報表中要求有 pdf格式的。起初,我有 gridview 匯出到word 或者excel 的資料,所以實現起來很容易,而匯出成 pdf,就犯難了,因為 pdf不是微軟自己的技術,所以在 net2.0 下是不可能有這樣現成的介面了。後...

能人不一定是好領導

在工作中,許多大家公認的聰明能幹的人被提拔為領導。但有相當一部分人沒成為好領導,還有的人在領導崗位上非常失敗。下面,剖析一下失敗的原因 一 特能幹的領導。有的領導確實特別有本事,在本單位中,十八般武藝,樣樣精通,是不可多得的全才。由於自己特能幹,就經常看不慣別人幹的活,口頭語 你這樣幹的不行 看我怎...