最近的由于项目的原因,要写下面的代码:
[mw_shl_code=c,true]void Fun(void)
{
unsigned char i;
for(i=7;i>=0;--i)
{
//do somethings
}
}
[/mw_shl_code]运行发现程序卡死在for语句,这是个容易忽略但是很基础的问题,就是,无符号整形当小于0时,会自动转换为最大值,因此相当于无限循环。只要将数据类型转换为signed char即可。
大家可以copy下面代码做测试:
[mw_shl_code=c,true]#include <stdio.h>
void main()
{
unsigned char i;
for(i=7;i>=0;--i)
{
printf("%d
",i);
}
printf("%d
",i); //i最后的值 对于有符号整形 会打印输出-1,而无符号不会执行到此条语句
}[/mw_shl_code]
一周热门 更多>