object-c中非零不一定是yes
来源:互联网 发布:nosql数据库是什么 编辑:程序博客网 时间:2024/04/30 20:21
Object-C 中的布尔类型: 中的布尔类型: 早期的 C 语言中是没有布尔类型的(C99 增加了布尔类型) ,Object-C 中增加 BOOL 类型来表 示 YES、NO,注意不是 TRUE、FALSE。
BOOL 使用了一个 8 位(一个字节)的整数进行表示, 8 位全0 就是 NO。
我们知道 C 语言中非 0 值即为逻辑真, 因此常常会有 int i=5;while(i){… …}的写法。
Object-C 在 中一定要注意慎用 C 语言中的这种数字与逻辑真假混合对待的做法去操作 BOOL 类型变量。
例如: BOOL bi=8960; if(bi==YES){ printf("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) {
NSLog(@"yes");
}else{
NSLog(@"no");
}
if (8960) {
NSLog(@"yes");
}else{
NSLog(@"no");
}
2013-08-22 15:39:24.443 ListDemo[9660:11303] no
2013-08-22 15:39:24.444 ListDemo[9660:11303] yes
本文固定链接: http://palmsky.net/?p=4237 | 掌中天际
- object-c中非零不一定是yes
- 我不一定是“易粉”
- 看书不一定是学习
- 生命不一定是直线
- 声明不一定是定义
- ORACLE查询SUM中非"0"(零)数据
- 能人不一定是好领导
- 单身,有时不一定是贵族
- 移动工作站,不一定是笔记本!
- 为什么object-c是动态语言
- 不一定。
- 不一定
- 眼睛看到不一定是客观得。
- [转贴]骑白马的不一定是王子
- 晕,推荐的不一定是好的
- 骑白马的不一定是王子
- 早睡早起不一定是好习惯
- 拥有奢侈品的人不一定是强者
- MTK中SCATTER
- 如何在安装了高版本的.NET的设备上运行低版本.NET的应用程序
- Windows 8.1 Preview ISO files
- HDU 2087 子序列
- Q_DECLARE_METATYPE说明
- object-c中非零不一定是yes
- modelsim和quartus 联合调试
- Android_View,ViewGroup,Window之间的关系 android activity,intent,service是什么关系?
- 一大三小:亚马逊,微软、谷歌、IBM ,IaaS四足鼎立
- 登录时记住密码——Filter、Cookie和Session的简单应用
- Hibernate 配置详解(1)
- Hibernate 配置详解(3)
- Hibernate 配置详解(2)
- MyBatis 映射对象关系举例(1)