我不明白为什么在以下代码片段中的“1<< 5”,在谷歌上没有找到任何东西
gpio_output_set((1 <&lt; 5),0,(1 <&lt; 5),0);为什么不用5?还是32? :)
谢谢……
表达的价值 1<<5 等于 32 等同于 2 ^ 5 (在数学符号中)
1<<5
32
2 ^ 5
操作者 << 是按位左移运算符。
<<
从C标准(6.5.7按位移位运算符)
4 E1的结果&lt;&lt; E2是E1左移E2位位置;腾空 位用零填充。
我想这个记录
gpio_output_set((1<<5), 0, (1<<5), 0);
用来代替
gpio_output_set( 32, 0, 32, 0);
这表明如何获得价值。但无论如何,使用像5这样的幻数是个坏主意。
因为1&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 5 操作1 <&lt;&lt; 5将给出十进制值32。
“为什么不用32?”
因为没有人(包括编写代码的人,一年后)知道什么 gpio_output_set(32) 手段。在这种情况下,32就是所谓的“神奇数字”,这是一个程序员俚语,用于硬编码的数字,它只是在你的代码中,没有合理的解释原因,它只是神奇地完成了工作。这是非常糟糕的编程习惯。
gpio_output_set(32)
1<<5 另一方面,是行业事实上标准的“第5位”的标准方式。程序员的意图很明确。
尽可能努力编写自我记录代码。