最小整数倍

看到va_list里定义了一个这样的宏:

_INTSIZEOF 宏,获取类型占用的空间长度,最小占用长度为int的整数倍:

#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

感觉方法真是巧妙。

如果 n=5 则返回 8

如果 n=15 则返回 16

......

原理自己是能想明白,就是不晓得当初人家是为什么会这样想的。

自己想法:

假设sizeof(int)=4 那么任何正整数除以4,余数就是 0~3。所以也可以这样想,任何一个正整数加上3,如 a~a+3,在这个范围里一定有一个数是 4 的整数倍,这个数一定比a大,这个数就是我们要的数。从 位 的角度看,要得到这个数,只要将 3 的位取反 再与 a+3 相与就得到了。

这是一个模版,任何整数都行,假设sizeof(int) = 5,6,7...

你可能感兴趣的:(最小整数倍)