INTSIZEOF 宏,获取类型占用的空间长度,最小占用长度为int的整数倍:
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
首先有以下证明:
先举个例子,假设一个盒子能放2个球,目前有6个球,那么就需要3个盒子,若是有5个球,那么还是需要3个盒子。扩展一下,若是有n个球,每个盒子能容乃下m个球,那么需要多少个盒子???这里直接给出结论就是(n + m - 1)/m个。
若m为sizeof(type);最小占用长度为type的整数倍
则 (n+m-1)/m*m = ((n + m - 1)>>x)<<x = (n + m - 1)& ~(sizeof(type) - 1)
成立的条件为:m = 2^x次方(x为整数)