c - 无符号与有符号整数
问题描述
这段代码有什么问题?
#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--)
它,它就会起作用!或者另一种方法是使用整数而不是使用无符号整数。
解决方案
由于变量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 4294967295
i=0
-1
4294967295
for
另一种方法是使用整数而不是使用无符号整数?您也可以unsigned integer
通过替换条件部分来执行相同的操作,i>0
以便在i=0
它失败时退出循环。
推荐阅读
- css - 如何阻止内容以反应完整页面为中心?
- windows - 为所有 AD 用户提供服务授权的 Kerberos 密钥表
- javascript - 如何在不显示画布的情况下让 Canvas 元素做出反应?
- opencv - 如何卸载旧版本的 OpenCV,以免文件冲突?
- laravel - Laravel Websockets 没有提供更新或者 Laravel Echo 没有监听它们,有时
- mysql - 如何摆脱带有格式化.sql 变更集错误的 Liquibase includeAll 标记:找不到元素“databaseChangeLog”的声明
- git - 为什么 github 显示当前日期而不是修改提交的实际日期?
- python - 将列转换为 python 字典
- python - cuML RandomForestClassifier:带有文档示例的 CUDA 错误
- python - 带有独角兽的 Django 在请求期间丢失了线程本地存储