中级会员
 
- 积分
- 218
- 金钱
- 218
- 注册时间
- 2015-1-19
- 在线时间
- 28 小时
|
最近的由于项目的原因,要写下面的代码:
[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\n",i);
}
printf("%d\n",i); //i最后的值 对于有符号整形 会打印输出-1,而无符号不会执行到此条语句
}[/mw_shl_code]
|
|