考虑以下这段C代码:
我的观察/问题:循环从未执行过。但是,如果我将i的数据类型从unsigned int更改为int,则一切都按预期工作。
我一直认为无符号整数是当你尝试从它们中不断减去时会“环绕”的值。因此,当i为零且我减去1时,它将环绕到UINT_MAX。而且由于其值永远不为负,这实际上就是一个无限循环。(当我将比较从i > -1更改为i >= 0时,这正是发生的情况。)
如果i是无符号的,并且我将其与-1进行比较,则我的逻辑存在错误,因为循环从未执行过。可能是编译器以某种方式对其进行了优化,或者运行时的值与我所期望的有所不同。
为什么循环不运行?
#include "stdio.h"
int main(void) {
int count = 5;
unsigned int i;
for (i = count; i > -1; i--) {
printf("%d\n", i);
}
return 0;
}
我的观察/问题:循环从未执行过。但是,如果我将i的数据类型从unsigned int更改为int,则一切都按预期工作。
我一直认为无符号整数是当你尝试从它们中不断减去时会“环绕”的值。因此,当i为零且我减去1时,它将环绕到UINT_MAX。而且由于其值永远不为负,这实际上就是一个无限循环。(当我将比较从i > -1更改为i >= 0时,这正是发生的情况。)
如果i是无符号的,并且我将其与-1进行比较,则我的逻辑存在错误,因为循环从未执行过。可能是编译器以某种方式对其进行了优化,或者运行时的值与我所期望的有所不同。
为什么循环不运行?