ios中BOOL和bool的区别
2014-11-05 16:00
316 查看
说明:objective-c 中的BOOL 实际上是一种对带符号的字符类型(signed char)的类型定义(typedef),它使用8位的存储空间。通过#define指令把YES定义为1,NO定义为0。
注意:objective-c 并不会将BOOL作为仅能保存YES或NO值的真正布尔类型来处理。编译器仍将BOOL认作8位二进制数,YES 和 NO 值只是在习惯上的一种理解。
问题:如果不小心将一个大于1字节的整型值(比如short或int)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。如果该低位字节刚好为0(比如8960,写成十六进制为0x2300),BOOL值将会被认作是0,即NO值。而对于bool类型,只有true和false的区别,即0为false,非0为true。
举例:
BOOL b1=8960; // 实际是 NO,因为8960换成十六进制为0x2300,BOOL 只有8位存储空间,取0x2300的低8位,00,所以是NO
bool b2=8960;//实际是true,因为bool类型,非0即为true。
注意:objective-c 并不会将BOOL作为仅能保存YES或NO值的真正布尔类型来处理。编译器仍将BOOL认作8位二进制数,YES 和 NO 值只是在习惯上的一种理解。
问题:如果不小心将一个大于1字节的整型值(比如short或int)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。如果该低位字节刚好为0(比如8960,写成十六进制为0x2300),BOOL值将会被认作是0,即NO值。而对于bool类型,只有true和false的区别,即0为false,非0为true。
举例:
BOOL b1=8960; // 实际是 NO,因为8960换成十六进制为0x2300,BOOL 只有8位存储空间,取0x2300的低8位,00,所以是NO
bool b2=8960;//实际是true,因为bool类型,非0即为true。
相关文章推荐
- iOS--bool和BOOL的区别
- ios bool跟BOOL的区别
- iOS中boolean、Boolean、BOOL、bool的区别
- ios编程——ios中Boolean、BOOL、bool的区别
- [iOS]iOS中boolean、Boolean、BOOL、bool的区别
- iOS中BOOL和bool的区别
- BOOL和bool的区别
- BOOL与bool的区别
- BOOL 与bool 的区别
- php中empty(),is_null(),isset(),bool之间的区别
- BOOL与bool区别
- VC++ bool 和 BOOL 区别
- vc中bool与BOOL的区别
- BOOL和bool的区别
- BOOL和bool的区别
- BOOL和bool的区别
- BOOL和bool的区别
- 关于bool 与 Boolean 的区别以及string 和 String
- [Windows编程] C++中 bool,BOOL ,VARIANT_BOOL 的区别
- php中 empty()--bool,is_null--isset的区别