V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wzyxidian
V2EX  ›  问与答

vs编译之后的代码彻底颠覆了我的信仰

  •  
  •   wzyxidian · 2013-11-10 19:41:08 +08:00 · 3062 次点击
    这是一个创建于 3826 天前的主题,其中的信息可能已经有所发展或是发生改变。
    求解释这个代码的输出是什么情况,c语言中~的优先级是明明高于>>,结果第一个输出竟然跟第三个输出相同的结果,这是为什么
    #include <stdio.h>
    void main()
    {
    unsigned char a=0xA5;
    unsigned char b=~a>>5;

    unsigned char c1=~a;
    unsigned char b1=c1>>5;

    unsigned char c2=a>>5;
    unsigned char b2=~c2;

    printf("%d,%d,%d\n",b,b1,b2);


    }
    6 条回复    1970-01-01 08:00:00 +08:00
    marchtea
        1
    marchtea  
       2013-11-10 20:35:03 +08:00
    这个和编译器无关,和类型有关.你用gcc编译也是一样的效果.
    rteta
        2
    rteta  
       2013-11-10 20:44:44 +08:00
    LZ正解,和类型有关,话说C语言的 unsigned类型巨复杂,一直搞不明白……
    learnshare
        3
    learnshare  
       2013-11-10 21:05:56 +08:00
    用 VS 学习 C 么?不建议学习的时候用这么复杂的 IDE,光 IDE 就要学上好久。
    xpfd
        4
    xpfd  
       2013-11-10 22:26:23 +08:00   ❤️ 1
    对于类似的情况,随手加个(),方便阅读而且会减少出错的可能性,保持一个好的编程习惯,何乐而不为
    xujialiang
        5
    xujialiang  
       2013-11-11 10:18:30 +08:00
    先搞懂数据在内存中是如何存放的。然后就清楚了。
    ljhero
        6
    ljhero  
       2013-11-11 10:33:13 +08:00
    看下编译后的汇编代码,明白各语句对应的操作指令就清楚了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1012 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:53 · PVG 07:53 · LAX 16:53 · JFK 19:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.