V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
wzyxidian
V2EX  ›  问与答

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

  •  
  •   wzyxidian · Nov 10, 2013 · 3944 views
    This topic created in 4561 days ago, the information mentioned may be changed or developed.
    求解释这个代码的输出是什么情况,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 replies    1970-01-01 08:00:00 +08:00
    marchtea
        1
    marchtea  
       Nov 10, 2013
    这个和编译器无关,和类型有关.你用gcc编译也是一样的效果.
    rteta
        2
    rteta  
       Nov 10, 2013
    LZ正解,和类型有关,话说C语言的 unsigned类型巨复杂,一直搞不明白……
    learnshare
        3
    learnshare  
       Nov 10, 2013
    用 VS 学习 C 么?不建议学习的时候用这么复杂的 IDE,光 IDE 就要学上好久。
    xpfd
        4
    xpfd  
       Nov 10, 2013   ❤️ 1
    对于类似的情况,随手加个(),方便阅读而且会减少出错的可能性,保持一个好的编程习惯,何乐而不为
    xujialiang
        5
    xujialiang  
       Nov 11, 2013
    先搞懂数据在内存中是如何存放的。然后就清楚了。
    ljhero
        6
    ljhero  
       Nov 11, 2013
    看下编译后的汇编代码,明白各语句对应的操作指令就清楚了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2672 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 16:00 · PVG 00:00 · LAX 09:00 · JFK 12:00
    ♥ Do have faith in what you're doing.