【发布时间】:2017-10-17 12:04:18
【问题描述】:
我正在从 CS50 学习 C。当我运行我的代码时,它显示“有符号整数溢出”。
#include <stdio.h>
#include <cs50.h>
int main(void)
{
int x = 41;
int c = 0;
while(x>=25)
{
c = c+1;
}
printf("%i\n", c);
}
谁能解释一下这是什么意思?
【问题讨论】:
-
你确实知道你有一个无限循环吗?
-
c无限递增,因为 while 循环永远不会结束。x永远不会递减,因此始终保持在 41,并且 41 始终大于 25。 -
您将永远添加到 c 中。它只能保持如此高的价值。
-
至于 overflow 问题。假设您有一个
signed char,其值范围为-128到127(使用two's complement)。现在如果signed char类型的变量的值是127,并且您添加1,那么会发生什么?什么是新价值?你不知道,因为你有一个有符号整数溢出,导致undefined behavior。问题与int(实际上是signed int)相同,只是值更大。 -
只需将
x = x -1;添加到您的while 中;)