首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >宏打印不正确的输出

宏打印不正确的输出
EN

Stack Overflow用户
提问于 2017-11-29 13:51:34
回答 0查看 82关注 0票数 0

我正在学习C编程,这就是我的问题。我觉得我已经学习了C语言中的宏主题,但我想我还没有完全准备好。

代码语言:javascript
复制
#define PGSIZE    4096 
#define CONVERT(sz)    (((sz)+PGSIZE-1) & ~(PGSIZE-1))

printf("0x%x", CONVERT(0x123456));

这是问题所在。我期望的输出是0x100000000000,但它输出的是0x124000

代码语言:javascript
复制
((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。

我做错了什么?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47545948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档