【发布时间】:2011-12-31 23:08:42
【问题描述】:
以下代码将参数四舍五入为 int 大小边界字节数。
#define _INTSIZE(n) ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1))
在我的机器上 int 是 4 个字节,所以 -- 如果我错了请纠正我 -- 这应该与查找整数的下一个 4 的倍数(在我的机器上)相同。下一个 4 的倍数,我的意思是如果不是 4 的倍数,则该数字应向上舍入为 4 的倍数。如果已经是 4 的倍数,则应保持不变。
我一直在玩弄这段代码。总而言之:为什么这段代码有效?(也许没有,但似乎有效。)我想有理由认为它适用于所有情况,而不仅仅是我试过的那些。
【问题讨论】:
-
将最后一位更改为
& ~(sizeof(int))有效吗?
标签: c macros bit-manipulation c-preprocessor boundary