1613551 发表于 2022-8-11 14:54:37

为什么这个不是死循环?

本帖最后由 1613551 于 2022-8-11 15:08 编辑

这串代码不应该是会一直循环吗?
实际却是直接就结束了

#include <stdio.h>
int main(void)
{
int x = 1;
while (x > 0)
{
    x++;
}
return 0;
}

一点点儿 发表于 2022-8-11 14:59:41

当x增大到超过int的最大范围时,程序就终止了

一点点儿 发表于 2022-8-11 15:00:47

在32位和64位机器中,int占32位,取值范围为-2147483648~2147483647

一点点儿 发表于 2022-8-11 15:02:13

当循环到x大于2147483647时,程序自动终止了

jackz007 发表于 2022-8-11 15:04:05

本帖最后由 jackz007 于 2022-8-11 15:06 编辑

          当 x 增大到 x = 0x7fffffff 也就是 2147483647 时,x + 1 = 0x80000000 对应的十进制数值为 -2147483648,也就是说,x 会直接变成一个很小的负值,这个时候 x > 0 的逻辑值可就是 false 了。

一点点儿 发表于 2022-8-11 15:04:21


当循环到x大于2147483647时,程序才结束

一点点儿 发表于 2022-8-11 15:05:11

运行程序后,等待几秒后程序才结束的

一点点儿 发表于 2022-8-11 15:05:52

那几秒的时间,程序一直在循环

一点点儿 发表于 2022-8-11 15:06:25

当循环到x大于2147483647时,程序才结束

一点点儿 发表于 2022-8-11 15:07:26

jackz007 发表于 2022-8-11 15:04
当 x 增大到 x = 0x7fffffff 也就是 2147483647 时,x + 1 = 0x80000000 对应的十进制数值为 -21 ...

哦,对哦

一点点儿 发表于 2022-8-11 15:08:00

忘记会变成负数了

一点点儿 发表于 2022-8-11 15:09:55

本帖最后由 一点点儿 于 2022-8-11 15:13 编辑

在32位和64位机器中,int占32位,取值范围为-2147483648~2147483647
最大正数可以表示为:0x7fff ffff
最大负数可以表示为:0xffff ffff
当循环到x等于2147483647时,x++,
x就等于-2147483648了,x<0,循环结束

1613551 发表于 2022-8-11 15:20:43

一点点儿 发表于 2022-8-11 15:09
在32位和64位机器中,int占32位,取值范围为-2147483648~2147483647
最大正数可以表示为:0x7fff ffff
...

看得出来,你真的很想要这50鱼币,于是我再多送了你14鱼币

一点点儿 发表于 2022-8-11 15:21:50

1613551 发表于 2022-8-11 15:20
看得出来,你真的很想要这50鱼币,于是我再多送了你14鱼币

感谢大佬,孩子太穷了{:9_228:}
页: [1]
查看完整版本: 为什么这个不是死循环?