首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用预处理器计算对数

如何使用预处理器计算对数
EN

Stack Overflow用户
提问于 2014-12-20 23:33:13
回答 1查看 7.7K关注 0票数 8

如何在windows上使用预处理器执行log(x)?

像这样:

代码语言:javascript
复制
#define A    log(4)/log(2)

在我的代码中,数组

代码语言:javascript
复制
int b[A]; // A=2 will be computed with the preprocessor ! not in run time
EN

回答 1

Stack Overflow用户

发布于 2014-12-22 04:19:21

对于使用最多32位整数的LOG宏,简短的定义可以是:

代码语言:javascript
复制
#define LOG_1(n) (((n) >= 2) ? 1 : 0)
#define LOG_2(n) (((n) >= 1<<2) ? (2 + LOG_1((n)>>2)) : LOG_1(n))
#define LOG_4(n) (((n) >= 1<<4) ? (4 + LOG_2((n)>>4)) : LOG_2(n))
#define LOG_8(n) (((n) >= 1<<8) ? (8 + LOG_4((n)>>8)) : LOG_4(n))
#define LOG(n)   (((n) >= 1<<16) ? (16 + LOG_8((n)>>16)) : LOG_8(n))

但是,在使用它之前,请检查您是否真的需要它。人们经常需要对2的幂的值使用对数。例如,当实现位数组时。虽然很难将log计算为常量表达式,但定义2的幂非常容易。因此,您可以考虑将常量定义为:

代码语言:javascript
复制
#define logA   4
#define A      (1<<logA)

而不是:

代码语言:javascript
复制
#define A     16
#define logA  LOG(A)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27581671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档