为什么这个程序输出" 1"?

时间:2015-03-14 19:04:38

标签: c

 #include<stdio.h>  
 main()  
 {  
      unsigned int a=1,b=2;  
      printf("%d\n",a-b>=0);  
      getch();  
 }

为什么这个程序输出“1”?

3 个答案:

答案 0 :(得分:3)

在启用警告的情况下编译,这将变得非常明显:

unsigned.c:5:22: warning: comparison of unsigned expression >= 0 is always true
      [-Wtautological-compare]
    printf("%d\n",a-b>=0);
                  ~~~^ ~

您正在减去两个无符号整数。即使减法等于-1,因为它们是无符号的,它会包裹并且你得到一些非常大的值。无符号整数不可能不大于或等于零。

答案 1 :(得分:1)

引用ANSI C 89减法标准,使用无符号操作数生成负数:

  

涉及无符号操作数的计算永远不会溢出,因为   结果无法由结果无符号整数表示   type是以大于最大值的数量减少的模数   可由结果无符号整数类型

表示的值

因此,无符号减法从不生成负数,使您的条件成立,从而打印1

答案 2 :(得分:0)

尝试打印部分逻辑表达式

    printf("%u >= %u\n",a-b, 0);

您将看到为什么a-b>=0为真。