码迷,mamicode.com
首页 > 其他好文 > 详细

宏_INTSIZEOF(n)

时间:2016-07-21 12:47:54      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

(取自stdarg.h):
宏_INTSIZEOF(n),它求出变量占用内存空间的大小,是va的实现的基础。

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

的意思就是:如果sizeof(n)是sizeof(int)的倍数,则保持不变,否则返回最小的,大于sizeof(n)的,sizeof(int)的倍数。
比如,如果sizeof(int)是4,那么sizeof(n)是1-4的时候返回4,5-8的时候返回8,以此类推

下面具体解释:
首先sizeof(int)写成2进制是1后面若干个0,假设是n个0
sizeof(int) - 1 就是n个1,
取非再和前面的数取与就是清除掉前面那个数的后面n比特。
如果sizeof(n) 后面n比特都是0,那么加sizeof(int)-1不进位,相当于加上再清除掉。
如果sizeof(n) 后面n比特至少有1位是1,那么加了之后会往前进1,相当于sizeof(n) 右移n位,加1,再补充上n个0

假设sizeof(n)是5,sizeof(int)是4 8&~3 = 8; 假设sizeof(n)是3,sizeof(int)是4 6&~3 = 4;

宏_INTSIZEOF(n)

标签:

原文地址:http://www.cnblogs.com/cumtli/p/5690995.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!