免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2545 | 回复: 2
打印 上一主题 下一主题

[BootLoader] 新手求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-21 14:48 |只看该作者 |倒序浏览
在阅读代码时,遇到:
1<<(5*2)
这个代码应该怎么来理解,与1<<10的区别是什么?
谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-07-21 21:24 |只看该作者
倒是纠正了我的想法,我一直觉得常量计算在预编译里,今天用gcc -E一看居然没有计算。

cat ./a.c
void main(void)
{
        int a=1<<10;
}

cat tmp/a.c
void main(void)
{
        int a=1<<(5*2);
}

gcc -E a.c 与 cd tmp, gcc -E a.c 有差异,所以应该不是预编译就计算了

gcc -S a.c 与 cd tmp, gcc -S a.c 一样,编译计算,2种写法没差别

        .file        "a.c"
        .text
.globl main
        .type        main, @function
main:
        pushl        %ebp
        movl        %esp, %ebp
        subl        $16, %esp
        movl        $1024, -4(%ebp)   已经计算成了1024
        leave
        ret
        .size        main, .-main
        .ident        "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
        .section        .note.GNU-stack,"",@progbits

diff a.s tmp/a.s 生成的汇编一样
diff a tmp/a 生成的可执行程序一样

论坛徽章:
0
3 [报告]
发表于 2011-07-22 09:49 |只看该作者
回复 2# fei1700
首先非常感谢你的回复。这是我在看韦东山的那本嵌入式书籍时看到的,当时很迷惑为什么要这样写,而且
里面有很多地方都是这样的写法,不知道是为了好看还是确实因为语法的需要,安装符号优先级,这两个的计算值应该是一样的,这没问题,但是
就是没有明白这样写的用意。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP