最近在工作遇到一个问题,当我给定义为char的变量赋负-1时,发现值变成了255。
经过研究,发现是编译器把char 当作了unsigned char. 呵呵,以前的经验一般把char默认当作signed char的。后来用google搜索了一下.原来编译器有个开关的 -funsigned-char就把char当作unsiged char, 如果编译器带上-fsigned-char就会把char当作signed char.
绝大多数系统,包括x86 GNU/Linux and Microsoft Windows,都把char当作singed char,而PowerPC and ARM processors会默认当作unsigned char.
以后写代码时,还是写上signed char或unsigned char. 这样以后移植工作就会顺利很多。
我有一个疑问,为啥char可以有编译器来指定是 signed char还是unsigned char,而short和int都默认为signed short和singed int.,并且没有编译器开关来设定呢????