请教一个ARM的C语言问题,在keil环境下为什么char i = -1;不行??
VC++可以、单片机Keil可以,为毛ARM不行?(S3C2440A)。char应是有符号字符型的吧?-1不是有符号数?source\main.c(53):warning...
VC++可以、单片机Keil可以,为毛ARM不行?(S3C2440A)。
char应是有符号字符型的吧?-1不是有符号数?
source\main.c(53): warning: #68-D: integer conversion resulted in a change of sign
这是神马警告????
为毛还不可以:
char i ;
if(i == -1){;;;;}
??????????????????????? 展开
char应是有符号字符型的吧?-1不是有符号数?
source\main.c(53): warning: #68-D: integer conversion resulted in a change of sign
这是神马警告????
为毛还不可以:
char i ;
if(i == -1){;;;;}
??????????????????????? 展开
2个回答
展开全部
char 是无符号数据类型
因为 char 可以表示 ASCII 国际字符编码表的 0 - 255 个字符
所以不存在负数的 char 值
如果你想表示负数的 char,可以使用 BYTE
因为 char 可以表示 ASCII 国际字符编码表的 0 - 255 个字符
所以不存在负数的 char 值
如果你想表示负数的 char,可以使用 BYTE
追问
char 默认情况下不是 前面的 signed 关键字省略不写了嘛?
你的意思是说unsigned char 和char 一个样?
那signed char 是何解释?
那单片机为何又不会报错?
那int 是 有符号还是无符号?
我去啊~~~~~~~~谭浩强是不是骗我啊- -。(C程序设计 52页)。
ARM怎么就会警告,单片机不会啊! VC++也不会啊。
追答
刚才看了看 MSDN,我用的是微软的 C++ 优化编译器,不知道和你的 ARM 单片机是否通用;
/*
Character values of type unsigned char have a range from 0 to 0xFF hexadecimal. A signed char has range 0x80 to 0x7F. These ranges translate to 0 to 255 decimal, and –128 to +127 decimal, respectively. The /J compiler option changes the default from signed to unsigned.
*/
MSDN 上说明:
字符类型的数值范围从 0 到 0xFF 十六进制,一个 signed char 的数值范围从 0x80 到 0x7F,这两个范围分别对应十进制的 0 到 255 以及 -128 到 127,使用 /J 编译器选项将 char 从默认的 signed 改变成 unsigned 。
按照上面说明,编译器默认 char 是 signed 的,也就是 -128 到 127,你可以查看你的编译器使用说明 。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询