通常我用 C 语言编程并经常使用按位运算符,因为它们更快。现在,我在使用按位运算符或除法和取模解决 Project Euler Problem 14 时遇到了这种时间差异。该程序是用go version go1.6.2.
带位运算符的版本:
package main
import (
"fmt"
)
func main() {
var buf, longest, cnt, longest_start int
for i:=2; i<1e6; i++ {
buf = i
cnt = 0
for buf > 1 {
if (buf & 0x01) == 0 {
buf >>= 1
} else {
buf = buf * 3 + 1
}
cnt++
}
if cnt > longest {
longest = cnt
longest_start = i
}
} …Run Code Online (Sandbox Code Playgroud)