代码之家  ›  专栏  ›  技术社区  ›  Destructor

解释C程序的结果[重复]

  •  4
  • Destructor  · 技术社区  · 11 年前

    我看到了以下打印输出的代码 “相同” 但我很难理解这个程序。请帮助我理解这个程序。

    int  main() 
    { 
       unsigned int x = -1; 
       int y = ~0; 
       if(x == y) 
          printf("same"); 
       else
          printf("not same"); 
       return 0; 
    }
    

    输出“相同”是如何产生的?请告诉我这里发生了什么。

    1 回复  |  直到 11 年前
        1
  •  10
  •   MichaelCMS    11 年前

    无符号int x=-1具有位标志(32位):

     11111111111111111111111111111111
    

    int 0具有位标志(32位):

     00000000000000000000000000000000
    

    ~0是0的否定(按位),即(32位):

    11111111111111111111111111111111
    

    作为补充说明:

     unsigned int x = -1;  
    

    相当于

     unsigned int x = UINT_MAX.