首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

typeof的这个用法没看清楚

2013-08-14 
typeof的这个用法没看明白#define ALIGN(x,a)__ALIGN_MASK(x,(typeof(x))(a)-1)#define __ALIGN_MASK(x,ma

typeof的这个用法没看明白
#define ALIGN(x,a)__ALIGN_MASK(x,(typeof(x))(a)-1)
#define __ALIGN_MASK(x,mask)(((x)+(mask))&~(mask))

BUF_SIZE = ALIGN((640*480),4096);

最后这BUF_SIZE的结果应该是么呀??
[解决办法]
ALIGN((640*480),4096);
==>
__ALIGN_MASK((640*480),(typeof((640*480)))(4096)-1)
==>
(((640*480)+((typeof((640*480)))(4096)-1))&~((typeof((640*480)))(4096)-1))
==>
(640 * 480 + int(4096) - 1) & ~ (int(4096) - 1)
==>
311295 & -4096  
==>
0x4BFFF & 0XFFFFF000
==>
0x4B000
==>
307200

基本意思就是把第一个数填充到第二个数的整数倍那么多.
即:
 如果 x % a 等于 0, 那么结果就是 x
 如果 x % a 不等于 0, 那么结果就是 (x / a + 1) * a  (里面的除法是整数除法)

所以如果改成 ALIGN((640 * 480 + 1), 4096) 结果就会是 311296

热点排行