解释C程序的结果

时间:2015-02-02 12:51:20

标签: c implicit-conversion

我看到下面的代码打印输出“相同”,但我在理解这个程序时遇到了麻烦。请帮我理解这个程序。

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

输出“相同”如何出现?请帮助我了解这里发生的事情。

1 个答案:

答案 0 :(得分:10)

无符号整数x = -1有位标志(32位):

 11111111111111111111111111111111

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

 00000000000000000000000000000000

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

 11111111111111111111111111111111

作为旁注:

 unsigned int x = -1;  

相当于

 unsigned int x = UINT_MAX.