为什么这个程序会输出;“1”吗;? #包括 main() { 无符号整数a=1,b=2; printf(“%d\n”,a-b>=0); getch(); }
为什么此程序输出“1”?编译时启用了警告,这将变得非常明显:为什么这个程序会输出;“1”吗;? #包括 main() { 无符号整数a=1,b=2; printf(“%d\n”,a-b>=0); getch(); },c,C,为什么此程序输出“1”?编译时启用了警告,这将变得非常明显: #include<stdio.h> main() { unsigned int a=1,b=2; printf("%d\n",a-b>=0); getch(); } 您正在减去两个无符号整数。尽管减法等于-1,但由于它们是无符号的,所以它会环绕,得到一些非常大的值。无符号整数不可能不大于或等于零。引用ANSI C 89使用无符号操作数生成负数的减法
#include<stdio.h>
main()
{
unsigned int a=1,b=2;
printf("%d\n",a-b>=0);
getch();
}
您正在减去两个无符号整数。尽管减法等于
-1
,但由于它们是无符号的,所以它会环绕,得到一些非常大的值。无符号整数不可能不大于或等于零。引用ANSI C 89使用无符号操作数生成负数的减法标准:
涉及无符号操作数的计算永远不会溢出,因为
无法由结果无符号整数表示的结果
类型按比最大值大一的数的模减少
可由结果无符号整数类型表示的值
因此,无符号减法永远不会生成负数,从而使条件为真,从而打印
1
尝试打印逻辑表达式的一部分
unsigned.c:5:22: warning: comparison of unsigned expression >= 0 is always true
[-Wtautological-compare]
printf("%d\n",a-b>=0);
~~~^ ~
你会明白为什么
a-b>=0
是真的。欢迎来到这里。在这里提问时请多加小心。在问题标题中以这种方式放置代码会侮辱眼睛。总结您的代码中存在的问题,首先是您自己的问题,然后将其放在可读的位置,供其他人阅读。可能的重复项
printf("%u >= %u\n",a-b, 0);