【发布时间】:2018-01-11 14:29:58
【问题描述】:
为什么下面的c代码会陷入死循环?
for(unsigned char i = 0; i <= 0xff; i++){}
结果相同:
for(unsigned char i = 0; i <= 0xff; ++i){}
我必须以何种方式修改代码,以使其按预期工作(不使用int 或unsigned int 数据类型)?
【问题讨论】:
-
你明白什么是无符号数吗?
-
8位
unsigned char不可能存储大于0xff的值,因此i <= 0xff不可能是false。 -
你的两个例子是相同的。我会假设他们有相同的结果。
-
使用
int。不要对可接受的答案施加愚蠢的限制。 -
请注意,如果您使用
-Wextra进行编译,gcc 会为您的循环发出警告,说明由于数据类型限制,条件始终为真。
标签: c loops unsigned-char