#define类似函数的宏中的数据类型

时间:2013-10-12 03:56:52

标签: c macros int c-preprocessor primitive-types

我正在尝试制作一个计算2 n 和2 n - 1 的宏。那将是:

#define b(n) (2 << (n))
#define a(n) ((b(n))-1)

但由于某种原因,这会将其转换为int,但我愿意使用unsigned long int。有谁知道如何解决这个问题?我已经考虑过使用内联函数,但是我并没有完全理解类函数宏和内联函数之间的区别。

1 个答案:

答案 0 :(得分:1)

OP需要unsigned long int,然后在您的宏中使用该类型

#define b(n) (1UL<<((unsigned)(n)))

当OP使用(2 << (n))时,结果为int,因为2int。有<<int的运营商unsigned会产生int。而是始终使用unsigned


此外,要模仿power(2,n),OP当然希望左移1,而不是向左移2