C 为什么我的程序总是重复,而不是给出最大整数值?
我目前正在学习C语言,我制作了一个程序,我认为它会给我最大的整数值,但它只是永远循环。我找不到一个答案,为什么它不会结束C 为什么我的程序总是重复,而不是给出最大整数值?,c,integer,unsigned,signed,C,Integer,Unsigned,Signed,我目前正在学习C语言,我制作了一个程序,我认为它会给我最大的整数值,但它只是永远循环。我找不到一个答案,为什么它不会结束 #include <stdio.h> int main() { unsigned int i = 0; signed int j = i; for(; i+1 == ++j; i++); printf(i); return 0; } #包括 int main() { 无符号整数i=0; 符号int j=i; 对于(;i+
#include <stdio.h>
int main()
{
unsigned int i = 0;
signed int j = i;
for(; i+1 == ++j; i++);
printf(i);
return 0;
}
#包括
int main()
{
无符号整数i=0;
符号int j=i;
对于(;i+1==++j;i++);
printf(i);
返回0;
}
任何帮助都将不胜感激,谢谢 您的代码具有未定义的行为。这并不是因为
无符号
整数溢出(当值太大时它会被包装)。有符号的整数溢出是未定义的行为
还请注意,如果您想知道int
可以容纳的最大值,请使用宏int\u MAX
maximum value for an object of type int
INT_MAX +32767 // 215 - 1
您应该正确地编写printf
。(先传递格式说明符,然后传递格式说明符指定的其他参数)
我以为会给我最大整数值
最大signed int
值在没有未定义行为(UB)风险的情况下无法通过实验进行移植。在OP的代码中,最终++j
溢出(UB)。UB永远包含循环
答案很好,使用printf(“%d\n”,INT\u MAX)代码>
要查找最大无符号值
:
printf("%u\n", UINT_MAX);
// or
unsigned maxu = -1u;
printf("%u\n", maxu);
此代码未编译,printf不正确。编译器中是否打开了警告?这不是一个精确的复制品,但它应该帮助您了解正在发生的事情。您遇到无符号整数溢出。当我再次从零开始时,输出应该提示出现了问题。什么将终止使用i=1,j=0
并测试i=++j
的循环,然后递增i
并再次执行相同的测试??(例如,1==1
,2==2
,等等)您也遇到了有符号整数溢出,运行时错误:有符号整数溢出:2147483647+1不能用类型“int”表示。
,这使得程序作为一个整体的行为未定义。你认为你怎么能像这样推断出最大整数值?相关:有符号到无符号的转换没有定义好吗?有符号值转换为无符号值用于比较,但它也用于预增量吗?@RetiredInja.:在比较中是-在预增量中否。