我正在编写一个混合了Objective-C和C的iPhone应用程序。我的代码中有32位整数标记,只有两个不同的值:0和1.我想使用数据类型小于32位。
有一种类型只有一位吗? Objective-C中“BOOL”的大小是多少?
我考虑过的一个解决方案是对一组32个标志使用一个32位整数...然后按以下方式检查每个标志:
if(ALL_FLAGS & (1 << SPECIFIC_FLAG)){...}
我真的很想使用“比特”类型。
干杯!
答案 0 :(得分:4)
Objective C下的BOOL类型(实际上它是Cocoa定义,OBJC本身不知道BOOL类型)正在使用一个字节。这与Windows 32 BOOL不同,后者相当于int或32位。
对于较小的类型,您可以使用典型的C / C ++方法,如上例中的位移或位结构(在这种情况下,编译器将执行位移和测试)。
typedef struct {
unsigned someflag:1;
unsigned anotherflag:1;
unsigned yetnoather:1;
} MYFLAGS ;
MYFLAGS allflags;
allflags.anotherflag= TRUE;
if (allflags.anotherflag) { /* somecode */ }
答案 1 :(得分:3)
还有一个CFBitVector,您可以在其中保存多组值...
答案 2 :(得分:1)
以下是BOOL类型的定义,您可以用相同的方式定义自己的类型:
typedef signed char BOOL;
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C"
// even if -funsigned-char is used.
#define OBJC_BOOL_DEFINED
#define YES (BOOL)1
#define NO (BOOL)0