这个宏是算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去取,如果是动态分配空间,也可以直接放入大小
|