请教一个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){;;;;}
???????????????????????
展开
 我来答
百度网友ddfb519
推荐于2017-12-15 · TA获得超过751个赞
知道小有建树答主
回答量:720
采纳率:50%
帮助的人:169万
展开全部
char 是无符号数据类型
因为 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,你可以查看你的编译器使用说明 。

百度网友e0d506c
2018-05-24
知道答主
回答量:1
采纳率:0%
帮助的人:850
展开全部
char 在keil编译环境下默认为 unsigned char 1个字节 范围是0至255
可以把char改为 signed char 1字节 范围-128至127
就不会报错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式