在复制别人代码的时候没有注意,在for语句中采用了无符号数和有符号数相比较的语句,编译过程中出现了警告,并没有太在意,单击运行,至此就出现了致命的错误,如下图所示:
编译警告:
运行错误:
此时for语句失去了判断的功效,确切的说是“n>=0”成了“恒成立”,直接进行后面的”n--”了,以至于使得i>8的情况出现。
下面总结一下:
有符号数与无符号数之间运算问题,这个问题测试是否懂得C语言中的整数自动转换原则。当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型 。因此,从这个意义上讲,无符号数的运算优先级要高于有符号数,这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
而对于浮点数来说,浮点数(float,double)实际上都是有符号数, unsigned 和signed前缀不能加在float和double之上,当然就不存在有符号数根无符号数之间转化的问题了