gpt4 book ai didi

c - 为什么这个人使用 (1 << 0)?

转载 作者:行者123 更新时间:2023-12-02 08:00:37 25 4
gpt4 key购买 nike

我正在阅读有关函数实现的代码,编写代码的人在他的 .h 中写了这个:

#define FT_LS_LONG      (1 << 0)
#define FT_LS_RECURSIVE (1 << 1)
#define FT_LS_HIDDEN (1 << 2)
#define FT_LS_REVERSE (1 << 3)
#define FT_LS_TIME (1 << 4)
#define FT_LS_LINE (1 << 5)

为什么他使用按位左移而不是其他的?而且,他可以用什么来替换这部分代码?我知道(1 << 0) == 0000 0001(1 << 1) == 0000 0010 等等。但我不明白如何使用它们。

最佳答案

它是 self 记录的代码。 1可能意味着什么,而 1 << 0绝对是有点面具。请注意,移位是在编译时计算的,因为它是一个整数常量表达式。

多一点代码格式会让一切变得更整洁:

#define FT_LS_LONG      (1 << 0)
#define FT_LS_RECURSIVE (1 << 1)
#define FT_LS_HIDDEN (1 << 2)
#define FT_LS_REVERSE (1 << 3)
#define FT_LS_TIME (1 << 4)
#define FT_LS_LINE (1 << 5)

毫无疑问,这些是用于屏蔽同一字节中不同数据位的位掩码。

也可以使用十六进制文字编写等效代码,这只是风格问题:

#define FT_LS_LONG      0x01u
#define FT_LS_RECURSIVE 0x02u
#define FT_LS_HIDDEN 0x04u
#define FT_LS_REVERSE 0x08u
#define FT_LS_TIME 0x10u
#define FT_LS_LINE 0x20u

关于c - 为什么这个人使用 (1 << 0)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57852215/

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