我正在用传统的学校算术技术来计算2^p,乘以2,如果> 9,我写了两行代码,用位运算符返回n/ 10和n% 10。当乘数为2:最大数为(2 * 9) + 1时,这些方法都是精确的。但是,这种方法从20开始是不准确的,而不需要。这些技术加快了节目的速度。
因为我想确定我是否正确地使用了C,这一技术是好的实践吗?
#include <stdio.h>
int main(void) {
unsigned int d, m;
/* division by 10 */
for (int i=0; i<20; ++i) {
d = (i + 6) >> 4;
printf("%u ", d);
}
printf("\n");
/* modulus 10 */
for (int i=0; i<20; ++i) {
m = i - (((i + 6) >> 4) * 10);
printf("%u ", m);
}
printf("\n");
return 0;
}发布于 2022-09-24 13:03:20
这不是很好的做法。
如果您编译按常量除法或模数并启用优化的代码,则编译器将在可能且等效时为您执行此操作(在检查、gcc uses a somewhat more complicated set of imul, shifts and a subtraction而不是整数除法指令时;比您编写的代码更昂贵,但仍然比整数除法便宜得多)。而且您的代码不会是一个不可读的混乱,当传递的值甚至稍微超出其设计参数时,它就会中断。
在非常罕见的情况下,您可能会这样做,如果
的理由。
但在这种情况下,您永远不希望编写不可读、不可维护、易碎的代码,只为了缩短几个周期。
https://stackoverflow.com/questions/73837240
复制相似问题