【问题标题】:explain the Outcome of C program [duplicate]解释 C 程序的结果 [重复]
【发布时间】:2015-02-02 12:51:19
【问题描述】:

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

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

输出“Same”是怎么来的?请帮助我了解这里发生的情况。

【问题讨论】:

  • ~0 的结果是什么?请解释一下。
  • 除了 -1 和 ~0 的位等价性之外,最好注意编译器会进行“通常的算术转换”,将 ~0 转换为 unsigned int 类型(例如解释为 @ 987654321@)。如果将数字转换为例如,比较的结果会有所不同。 int64_t,但这不是 c 中发生的事情。一个相关问题:here

标签: c implicit-conversion


【解决方案1】:

Unsigned int x = -1 具有位标志(32 位):

 11111111111111111111111111111111

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

 00000000000000000000000000000000

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

 11111111111111111111111111111111

附注:

 unsigned int x = -1;  

等价于

 unsigned int x = UINT_MAX. 

【讨论】:

  • 我认为 #define 是 INT_MAX... 不是 MAX_INT
  • @Zeta 完成。我没有考虑将确切的位数作为信息的核心。它背后的想法是让 OP 了解位的行为。我发现举例说明 14 位或 32 位的区别无关紧要。不过,我确实觉得abelenky 的评论很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
相关资源
最近更新 更多