我遇到了一个枚举定义:

typedef enum NSInteger {
    kBorderTypeNone   = 0,
    kBorderTypeLeft   = 1 << 0,
    kBorderTypeRight  = 1 << 1,
    kBorderTypeTop    = 1 << 2,
    kBorderTypeBottom = 1 << 3
} BorderType;


并且(可能)也可以等同于

typedef enum NSInteger {
    kBorderTypeNone   = 0,
    kBorderTypeLeft   = 1 ,
    kBorderTypeRight  = 2,
    kBorderTypeTop    = 4,
    kBorderTypeBottom = 8
} BorderType;


内部差异(如果有)是什么?
一个相对于另一个有什么优势吗?
推荐哪一个?

编辑1:
如果两者相同,那么编译器如何处理呢?
它在编译器的哪个阶段都简化为相同的指令集?

最佳答案

两种格式都编译为相同格式。从易于编程的角度来看,第一个是有效的。第二个在编译期间效率更高,因为它是直接分配值。

09-19 20:41