我正在学习C编程,这就是我的问题。我觉得我已经学习了C语言中的宏主题,但我想我还没有完全准备好。
#define PGSIZE 4096
#define CONVERT(sz) (((sz)+PGSIZE-1) & ~(PGSIZE-1))
printf("0x%x", CONVERT(0x123456));这是问题所在。我期望的输出是0x100000000000,但它输出的是0x124000。
((sz)+PGSIZE-1) = (0x123456)+4096-1
= (0x123456)+(0x1000 0000 0000) - 1 //4096 is 2^12
= 0x1000 0012 3456 - 1
= 0x1000 0012 3455
~(PGSIZE-1) => ~(0x0111 1111 1111) = 0x1000 0000 0000
((sz)+PGSIZE-1) & ~(PGSIZE-1) = (0x1000 0012 3455) & (0x1000 0000 0000)
= 0x100000000000但是当我运行程序时,它输出0x124000。
我做错了什么?
https://stackoverflow.com/questions/47545948
复制相似问题