我正在审查Arduino库中的一些代码,并在主循环中看到以下if语句:
draw_state++;
if ( draw_state >= 14*8 )
draw_state = 0;
draw_state
是uint8_t
。
为什么14*8
写在这里而不是112?我最初认为这样做是为了节省空间,因为14和8都可以用一个字节表示,但是112可以表示。
我不明白为什么编译器不会将其优化为112,否则它意味着必须在每次迭代时进行乘法而不是查找值。这对我来说就像有某种形式的记忆和处理权衡。
有没有人建议为什么要这样做?
注意:我很难想出明确的标题,欢迎提出建议。
答案 0 :(得分:1)
可能要明确显示数字112
的来源。例如,它可能是14个字节的位数(但当然我不知道代码的上下文,所以我可能是错的)。对于那些价值来源的人而言,这比仅仅112
更为明显。
正如您所指出的,编译器可能会优化它,因此机器代码中不会有乘法。