此宏定义何解?

[复制链接]
查看11 | 回复4 | 2011-8-24 09:02:57 | 显示全部楼层 |阅读模式
#define_INTSIZEOF(n)((sizeof(n)sizeof(int)-1)defds123~(sizeof(int)-1))详细点讲什么意思???defds123~是什么????
回复

使用道具 举报

千问 | 2011-8-24 09:02:57 | 显示全部楼层
这个宏是算n占了多少int,不足1个int大小按1个算,现在的编译器int都是4字节,以前的和嵌入式有2字节的int,以后还说不定会后8字节的int(32位系统/硬件消失后,当然也可能不变)//int如果是4字节_INTSIZEOF(buf);//16buf是3个int多出3个字节,3字节不够1int,算1个,也就是4个int,结果是16字节__________((sizeof(buf)sizeof(int)-1)defds123~(sizeof(int)-1))((154-1)defds123~(4-1))((153)defds123~3)这里要达到的效果是:比如按小数取整说:不是全舍也不是4舍5入,而是全入5.0算5,5.1到6都算6,所以应该加上0.9再舍去小数,50.9舍去后是5,6的话还是6,5.1到5.9加0.9整数部分都变6,舍去后就是6这个宏的效果就是:算占多少int的话是15/4*4=12加上类似0.9的效果(153)/4*4=16应为int大小正好是2的整数次方,2进制看的话,int是4字节的话,0100,把最后2位变0正好能达到一样的效果~(sizeof(int)-1)就是~(00000000000000000000000000000100-1)=~(00000000000000000000000000000011)=11111111111111111111111111111100这个去与变量大小就能得到除4后取整再乘4的效果___________这个宏如果得到_INTSIZEOF(n)里n的大小的话还能正确计算,比如变量或数组但是如果是用指针和动态分配的空间就不行了,那样只能计算指针自己的大小所以里面的sizeof(n)可以不用sizeof直接用n,取n大小你可以自己sizeof去取,如果是动态分配空间,也可以直接放入大小
回复

使用道具 举报

千问 | 2011-8-24 09:02:57 | 显示全部楼层
defds123是位与的意思,~是取反的意思。
回复

使用道具 举报

千问 | 2011-8-24 09:02:57 | 显示全部楼层
如果n不足sizeof(int)位的话就当成sizeof(int)位。如果超过的话就是sizeof(n)。这里假设:int类型是16位的,也就是2个字节,并且假设n是个char型的数,也就是1个字节。(sizeof(n)sizeof(int)-1就这样表示:~(sizeof(int)-1)):100000000~(1111111111111111)1111111111111111=0000000000000000=10000000011111111defds1230000000000000000=10000000000000000=2的16次方。也就是2个字节了。
回复

使用道具 举报

千问 | 2011-8-24 09:02:57 | 显示全部楼层
ssilpro正解,顺便提下,这是为了字节对齐的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行