ipoqing 发表于 2012-12-29 16:31:25

char字符和int字符的-1的区别

以前没有怎么注意到这个细节,做一个减一的简单程序:   分别用char i;和int i;定义变量i的类型,但是当进行i--;然后if(i==-1)i=99;这样的简单程序出现的结果却是不一样的,貌似char类型0自减之后不是-1;请高手讲解

arm 发表于 2012-12-29 16:31:26

本帖最后由 arm 于 2012-12-29 16:40 编辑

很多编译器的char默认是unsigned类型的,配置那里有个选项选择char是signed类型还是unsigned类型的
给你看看图,IAR的
当char是unsigned类型时,0自减后当然就不是-1了

takashiki 发表于 2012-12-29 16:37:13

首先请明白,char、signed char、unsigned char是三种完全不同的数据类型,这点和其他的数据类型不同。
char在特定的条件下可以等价于后两种中的某一种,一般情况等价于signed char,但也有的编译器默认为无符号的。

现在你明白了,(uchar)0 自减后可能是-1,也可能是255。

mengfc 发表于 2012-12-31 09:45:31

楼上两位回答的很详细了,搞嵌入式开发一定要把C语言的基础打牢。而搞桌面程序开发的,语言高级,错误提示明确,排错相对要容易多了,所以很多人对基础功就不在意了。

ipoqing 发表于 2013-1-4 11:32:04

多谢楼上的回答,没注意到有的编译器默认的char也是unsigned的
页: [1]
查看完整版本: char字符和int字符的-1的区别