3

だから私の旅行では、列挙型がこのように定義されているのを見たことがあります(ビットマップが必要な場合)

enum {
    UIControlStateNormal       = 0,                       
    UIControlStateHighlighted  = 1 << 0,                  // used when UIControl isHighlighted is set
    UIControlStateDisabled     = 1 << 1,
    UIControlStateSelected     = 1 << 2,                  // flag usable by app (see below)
};

ただし、最近NSJSONSerilizationクラスを調べて、そのように定義された列挙型に出くわしました。

enum {
    NSJSONReadingMutableContainers = (1UL << 0),
    NSJSONReadingMutableLeaves     = (1UL << 1),
    NSJSONReadingAllowFragments    = (1UL << 2)
};
typedef NSUInteger NSJSONReadingOptions;

だから私の質問は何をするのかということだと思いULます。1 << 1との違いは何ですか1UL << 1

4

4 に答える 4

5

C++ では、UL単にリテラルがunsigned long整数型であることを意味します。デフォルトの整数リテラルはint.

于 2012-04-22T17:40:48.230 に答える
5

1 << 1と の間に違いはありませんが、 と の間に違い1UL << 1がある場合があります。プラットフォームによっては、は よりも大きくなる可能性があるため、に多くの値がある場合、 は安全に使用できない可能性があります。1 << 331UL << 33unsigned longintenumint

于 2012-04-22T17:46:20.157 に答える
1

実際には、コードに違いはありません。

1最初の のタイプはで、2 番目intの のタイプは です。1ULunsigned long

于 2012-04-22T17:42:44.733 に答える
1

コードは同じように機能し、実際の違いはありません。

ただし、1最初のコードintの のタイプは です1ULが、2 番目のコードの のタイプは ですunsigned long

于 2012-04-22T17:45:27.893 に答える