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 04:51:53 29 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/

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