我有点熟悉C和C ++的typedef枚举语法。我现在正在使用Objective-C进行编程,并在以下示例中遇到了语法。我不确定语法是否特定于Objective-C。但是,我的问题在以下代码段中,语法1 << 0
是什么意思?
typedef enum {
CMAttitudeReferenceFrameXArbitraryZVertical = 1 << 0,
CMAttitudeReferenceFrameXArbitraryCorrectedZVertical = 1 << 1,
CMAttitudeReferenceFrameXMagneticNorthZVertical = 1 << 2,
CMAttitudeReferenceFrameXTrueNorthZVertical = 1 << 3
} CMAttitudeReferenceFrame;
这是C语言家族所共有的,并且在C,C ++和Objective-C中均相同。与Java,Pascal和类似语言不同,C枚举不限于为其命名的值;它实际上是一种整数类型,其大小可以表示所有命名值,并且可以将枚举类型的变量设置为枚举成员中的算术表达式。通常,一个人使用移位将值乘以2,而一个人使用按位逻辑运算来组合值。
typedef enum {
read = 1 << 2, // 4
write = 1 << 1, // 2
execute = 1 << 0 // 1
} permission; // A miniature version of UNIX file-permission masks
同样,移位操作全部来自C。
您现在可以编写:
permission all = read | write | execute;
您甚至可以将该行包括在权限声明本身中:
typedef enum {
read = 1 << 2, // 4
write = 1 << 1, // 2
execute = 1 << 0, // 1
all = read | write | execute // 7
} permission; // Version 2
如何打开execute
文件?
filePermission |= execute;
请注意,这很危险:
filePermission += execute;
这会将值更改all
为8
,这没有任何意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句