我正在尝试制作一个计算2 n 和2 n - 1 的宏。那将是:
#define b(n) (2 << (n))
#define a(n) ((b(n))-1)
但由于某种原因,这会将其转换为int
,但我愿意使用unsigned long int
。有谁知道如何解决这个问题?我已经考虑过使用内联函数,但是我并没有完全理解类函数宏和内联函数之间的区别。
答案 0 :(得分:1)
OP需要unsigned long int
,然后在您的宏中使用该类型
#define b(n) (1UL<<((unsigned)(n)))
当OP使用(2 << (n))
时,结果为int
,因为2
是int
。有<<
和int
的运营商unsigned
会产生int
。而是始终使用unsigned
。
此外,要模仿power(2,n)
,OP当然希望左移1
,而不是向左移2
。