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+

我目前正在学习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+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.:在比较中是-在预增量中否。