今天,当我阅读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)
是这样的意思吗?我使用有四个字节的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
但是,如果她/他想这样做,为什么不直接分配常量变量呢?
/* 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
如果你知道,请帮助我,非常感谢! :)
这通常用于明确您正在谈论位标志。 1、2 和 4 会让大多数程序员意识到我们谈论的是 2 的幂序列;不是每个人都会立即知道 1<<14 是 16384。 编译器将为您执行这些计算,因此不会减慢程序速度。 一切都与清晰度有关。
您有时还会看到这些内容以十六进制形式编写,因为它比十进制常量更接近基础二进制表示形式,并且可以更紧凑。