【发布时间】:2013-10-12 03:56:52
【问题描述】:
我正在尝试制作一个计算 2 n 和 2 n - 1 的宏。那将是:
#define b(n) (2 << (n))
#define a(n) ((b(n))-1)
但是由于某种原因,这将其转换为int,但我愿意使用unsigned long int。有谁知道如何解决这个问题?我曾经考虑过使用内联函数,但是我并没有完全理解类函数宏和内联函数之间的区别。
【问题讨论】:
-
你不想
#define b(n) (1u << (n)) -
把它改成
#define b(n) (2ULL<<(n)),应该会很长 -
@Roberto ... 或
(((uintmax_t)1) << ((unsigned)(n))) -
@chux: 是的,1 是对的,不是 2,你是对的 (1
-
感谢 Brian 的编辑!
标签: c macros int c-preprocessor primitive-types