zhanjunlihai 2023-10-11 23:49 采纳率: 25%
浏览 8
已结题

c语言 int溢出 怎么计算

最后三个i 是怎么算出来的

#include<stdio.h>
main( )
{ int i=1;
  i=i*2;  printf(" i=%d\n ",i);
  i=i*3;  printf(" i=%d\n ",i);
  i=i*4;  printf(" i=%d\n ",i);
  i=i*5;  printf(" i=%d\n ",i);
  i=i*6;  printf(" i=%d\n ",i);
  i=i*7;  printf(" i=%d\n ",i);
  i=i*8;  printf(" i=%d\n ",i);
  i=i*9;  printf(" i=%d\n ", i);
  i=i*10; printf(" i=%d\n ",i);
return 0;}

结果:


```c
i=2
i=6
i=24
i=120
i=720
i=5040
**i=-25216
i=-30336
i=24320
**

```

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-13 01:31
    关注

    【以下回答由 GPT 生成】

    根据C语言中int类型的溢出规则,当一个int变量的值超过了其可表示的范围时,它将会重新从最小值或者最大值开始计数。对于int类型来说,其范围是-2147483648到2147483647。

    在给出的代码中,初始值i=1。按照代码中的运算方式,i每次都会乘以一个数字,然后将结果赋给i。下面我将逐步解释各个步骤的数值计算过程:

    1. i = i * 2 此时i的值为1,乘以2的结果为2。因此,第一个输出的结果为 i=2。

    2. i = i * 3 此时i的值为2,乘以3的结果为6。因此,第二个输出的结果为 i=6。

    3. i = i * 4 此时i的值为6,乘以4的结果为24。因此,第三个输出的结果为 i=24。

    4. i = i * 5 此时i的值为24,乘以5的结果为120。因此,第四个输出的结果为 i=120。

    5. i = i * 6 此时i的值为120,乘以6的结果为720。因此,第五个输出的结果为 i=720。

    6. i = i * 7 此时i的值为720,乘以7的结果为5040。因此,第六个输出的结果为 i=5040。

    到此为止,结果仍然在int范围内,并没有发生溢出。但是,继续运算会导致溢出。

    1. i = i * 8 此时i的值为5040,乘以8的结果为40320,超过了int类型的最大值。根据溢出规则,结果会从最小值开始计数,因此i的值为-25216。第七个输出的结果为 i=-25216。

    2. i = i * 9 此时i的值为-25216,乘以9的结果为-226944。继续超过了int类型的范围,根据溢出规则,结果会从最大值开始计数,因此i的值为-30336。第八个输出的结果为 i=-30336。

    3. i = i * 10 此时i的值为-30336,乘以10的结果为-303360。仍然超过了int类型的范围,根据溢出规则,结果会从最小值开始计数,因此i的值为24320。第九个输出的结果为 i=24320。

    最终的结果与预期结果一致。

    需要说明的是,整型的溢出是不可预测的行为,它会因编译器和平台的不同而有所差异。所以在编程中,应尽量避免溢出的情况,并在需要时使用更大范围的数据类型。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月16日
  • 已采纳回答 11月8日
  • 创建了问题 10月11日