以下代码将参数向上舍入为int size boundary of bytes。
#define _INTSIZE(n) ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1))
在我的机器上int是4个字节,所以 - 如果我错了,请纠正我 - 这应该与查找整数的4的下一个倍数(在我的机器上)相同。通过4的下一个倍数,我的意思是数字应该四舍五入为4的倍数,如果不是4的倍数。如果已经是4的倍数,则应该保持单独。
我一直在玩这个代码。它的长短是:为什么这个代码有效?(也许它没有,但它似乎。)我想有一些理由认为它适用于所有情况,而不仅仅是那些我试过的。
答案 0 :(得分:8)
代码首先在数字上加三。
然后它将最后两位缩小为四舍五入。就像你可以通过用零替换最后两位数来向下舍入到最接近的100的十进制数。)
如果数字已经是四的倍数,则向它添加三,然后向下舍入到最接近的四的倍数,根据需要单独留下它。如果数字是1,2或3,而不是4的倍数,则向它添加3将其提升到下一个4的倍数,然后将其向下舍入,完全符合要求。
答案 1 :(得分:2)
这实际上有一个微妙的错误。 '& 〜(sizeof(int) - 1)'仅在sizeof(int)是2的幂时才有效,其中36位和80位架构确实存在。如果你把它改成'%sizeof(int)'那么它总是正确的。