首页 > 解决方案 > 无符号与有符号整数

问题描述

这段代码有什么问题?

#include<stdio.h>
int main()
{
    unsigned int  i;
    for(i=100;i>=0;i--)
    {
        printf("%u ",i);
    }
  return 0;
}

这段代码不起作用,但如果我使用for(i=100;i>0;i--)它,它就会起作用!或者另一种方法是使用整数而不是使用无符号整数。

标签: c

解决方案


由于变量i被声明为unsigned int,因此此条件i>=0永远不会失败,因此会导致无限循环旋转。

unsigned int  i;
for(i=100;i>=0;i--) { /* i will never become negative */
    printf("%u \n",i);
}

请注意,看到这一点UINT_MAX,即它的范围从所以当它打印和递减时,接下来它不会是,它将是,因此上面的循环导致无限循环。4294967295 0 to 4294967295i=0-14294967295for

另一种方法是使用整数而不是使用无符号整数?您也可以unsigned integer通过替换条件部分来执行相同的操作,i>0以便在i=0它失败时退出循环。


推荐阅读