gpt4 book ai didi

php - “/*重载元素数据类型*/#define OE_IS_ARRAY (1<<0) #define OE_IS_OBJECT (1<<1) #define OE_IS_METHOD (1<<2)”是什么意思?

转载 作者:行者123 更新时间:2023-12-02 21:50:46 31 4
gpt4 key购买 nike

今天,当我阅读php内核代码时,在目录: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

但是如果她/他想要这样做,为什么不直接分配 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

知道的请帮帮我,非常感谢! :)

最佳答案

这通常用于明确您正在谈论的位标志。 1、2 和 4 会让大多数程序员意识到我们正在讨论 2 的幂序列;并不是每个人都会立即知道 1<<14 是 16384。编译器会为您完成这些计算,因此不会减慢程序速度。这一切都与清晰度有关。

有时您还会看到这些以十六进制编写的内容,因为它比十进制常量更接近于底层二进制表示形式,并且可以更紧凑。

关于php - “/*重载元素数据类型*/#define OE_IS_ARRAY (1<<0) #define OE_IS_OBJECT (1<<1) #define OE_IS_METHOD (1<<2)”是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18668579/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com