char字符和int字符的-1的区别
以前没有怎么注意到这个细节,做一个减一的简单程序: 分别用char i;和int i;定义变量i的类型,但是当进行i--;然后if(i==-1)i=99;这样的简单程序出现的结果却是不一样的,貌似char类型0自减之后不是-1;请高手讲解 本帖最后由 arm 于 2012-12-29 16:40 编辑很多编译器的char默认是unsigned类型的,配置那里有个选项选择char是signed类型还是unsigned类型的
给你看看图,IAR的
当char是unsigned类型时,0自减后当然就不是-1了 首先请明白,char、signed char、unsigned char是三种完全不同的数据类型,这点和其他的数据类型不同。
char在特定的条件下可以等价于后两种中的某一种,一般情况等价于signed char,但也有的编译器默认为无符号的。
现在你明白了,(uchar)0 自减后可能是-1,也可能是255。 楼上两位回答的很详细了,搞嵌入式开发一定要把C语言的基础打牢。而搞桌面程序开发的,语言高级,错误提示明确,排错相对要容易多了,所以很多人对基础功就不在意了。 多谢楼上的回答,没注意到有的编译器默认的char也是unsigned的
页:
[1]