有符号和无符号整形导致的程序卡死

2019-10-16 01:14发布

    最近的由于项目的原因,要写下面的代码:

    [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]
0条回答

一周热门 更多>