C代码格式使用<<

C code format using <<

我不明白为什么以下代码片段中的“1<<5”在 google

上找不到任何内容
gpio_output_set((1<<5), 0, (1<<5), 0);

为什么不用5?还是32? :)

感谢帮助

表达式 1<<5 的值等于 32 并等效于 2 ^ 5(在数学符号中)

运算符<<是按位左移运算符。

来自 C 标准(6.5.7 移位运算符)

4 The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits are filled with zeros.

我觉得这个记录

gpio_output_set((1<<5), 0, (1<<5), 0);

被用来代替

gpio_output_set( 32, 0, 32, 0);

说明如何获取值。但无论如何,使用像 5 这样的幻数是个坏主意。

因为 1<<5 是一个位运算,所以它与十进制的 5 有很大的不同。 操作 1<<5 将给出十进制值 32.

"Why not use 32?"

因为没有人(包括编写代码的人,一年后)知道 gpio_output_set(32) 是什么意思。在这种情况下,32 就是所谓的 "magic number",这是程序员的俚语,指的是一个硬编码的数字,它就在你的代码中,没有合理的解释为什么,它只是神奇地完成了工作。这是非常糟糕的编程习惯。

另一方面,

1<<5 是行业事实上的标准说法 "bit number 5"。程序员的意图很明确。

只要有可能,始终努力编写自文档化代码。