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"。程序员的意图很明确。
只要有可能,始终努力编写自文档化代码。
我不明白为什么以下代码片段中的“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"。程序员的意图很明确。
只要有可能,始终努力编写自文档化代码。