2

今日、php カーネル コードを読んだときに、 dir:php5.3/Zend/Zend.hに行コードがあり、混乱しました。

コードは次のとおりです。

/* overloaded elements data types */
#define OE_IS_ARRAY     (1<<0)
#define OE_IS_OBJECT    (1<<1)
#define OE_IS_METHOD    (1<<2)

こういう意味ですか?そして、4バイトのint型を使用し、左シフト演算を示します。

0000 0000 0000 0000 0000 0000 0000 0000 = 0
After 1 <<
0000 0000 0000 0000 0000 0000 0000 0000 = 0
___________________________________________

0000 0000 0000 0000 0000 0000 0000 0001 = 1
After 1<<
0000 0000 0000 0000 0000 0000 0000 0010 = 2
___________________________________________

0000 0000 0000 0000 0000 0000 0000 0010 = 1
After 1<<
0000 0000 0000 0000 0000 0000 0000 0100 = 4

しかし、彼女/彼がこれをやりたいのなら、const変数を直接割り当てないのはなぜですか?

/* overloaded elements data types */
#define OE_IS_ARRAY     (0)//turn the 1<<0 directly
#define OE_IS_OBJECT    (2)//turn the 1<<1 directly
#define OE_IS_METHOD    (4)//turn the 1<<2 directly

ご存じでしたら、どうぞよろしくお願いします!:)

4

1 に答える 1

5

これは通常、ビット フラグについて話していることを明確にするために使用されます。1、2、および 4 を使用すると、ほとんどのプログラマーは、これが 2 の累乗列について話していることに気付くでしょう。誰もがすぐに 1<<14 が 16384 であることを知っているわけではありません。コンパイラがこれらの計算を行うため、プログラムの速度が低下することはありません。明快さがすべてです。

これらは 16 進数で記述されている場合もあります。これは、10 進数の定数よりも基になる 2 進数の表現により近く、よりコンパクトにできるためです。

于 2013-09-07T00:53:46.480 に答える