Fibonacci函数无法正确计算

Nat*_*res 6 c++ macros bit-shift fibonacci

我已经定义了这个宏

#define FIB(n) (( 4 << n*(3+n))/((4 << (2*n)) - (2 << n) - 1))%(2 << n)
Run Code Online (Sandbox Code Playgroud)

当我试图得到一个答案时,不能正常工作,例如,如果我打电话给FIB(7),它给我0,那显然是错的.我在python中测试了这个函数,它运行得很好.所以,任何人都可以解释为什么它在C和C++中不起作用?

Mik*_*CAT 10

4 << n*(3+n)成为4 << 7*(3+7)当更换n7.

这意味着4 << 70.如果大小int为32位或64位,则移位70位太多,这会在C中调用未定义的行为.

Python支持多精度算术,因此它可以很好地工作.