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)当更换n用7.
这意味着4 << 70.如果大小int为32位或64位,则移位70位太多,这会在C中调用未定义的行为.
Python支持多精度算术,因此它可以很好地工作.