prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 20.15

我一直在用移位运算符替换乘法和除法,因为移位效率更高。


这是一个潜在的危险且通常不必要的优化示例。任何名副其实的编译器都可以用左移替换常量、二的幂乘法,或者用右移替换无符号数的类似除法。(Ritchie 最初的 PDP-11 编译器,尽管它运行在不到 64K 的内存中,并且省略了现在被认为是必需的几个功能,但也执行了这两种优化,甚至没有开启它的可选优化通道。)此外,编译器只会在这些优化是正确的情况下进行;许多程序员忽略了这样一个事实:右移负值等同于除法。(因此,当您需要确保执行这些优化时,可能需要将相关变量声明为unsigned.)


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管