【问题标题】:Don't understand simple C Program if/else result [duplicate]不懂简单的 C 程序 if/else 结果 [重复]
【发布时间】:2015-06-21 12:43:14
【问题描述】:
int main()
{
    unsigned long a= 100000;
    long b = -1;
    if (b > a)
        printf("yes\n");
    else
        printf("No\n");

    return 0;
 }

当我们知道 100000 > -1 时,为什么输出为“是”。所以相应地它应该打印“NO”,但我很天真,我真的可以理解它

【问题讨论】:

标签: c


【解决方案1】:

当您比较 longunsigned long 时,两者都会首先转换为 unsigned long,因此(取决于平台)-1 值变为 0xFFFFFFFF。结果就清楚了。

【讨论】:

  • 值 -1 如何变成 0xFFFFFFFF ???抱歉@dlask 会给出一个要点或任何类型的链接?
  • 叫做补码
【解决方案2】:

在这一行:

if (b > a)

您将unsigned longlong 进行比较,这会导致错误。

简单的改变

 unsigned long a= 100000;

  long a= 100000;

【讨论】:

  • 好吧,我明白你的意思了,但我想知道 unsigned 如何使 long a 的值小于 long b ?
  • @SJith:看,无符号表示它的值将从 0 开始,并且不能包含负数。因此,当您尝试将负数拟合为无符号数时,它会隐式转换为非负数。因此,-1 将被转换为大于 10000 的 2^32-1,因此您可以得到输出。
  • 谢谢@karma_geek :)
猜你喜欢
  • 2016-08-20
  • 2022-08-18
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 2021-03-07
  • 2013-01-05
  • 1970-01-01
相关资源
最近更新 更多