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