char定义解释

ANSI C 提供了3种字符类型,分别是char、signed char、unsigned char
char相当于signed char或者unsigned char,但是这取决于编译器!
这三种字符类型都是按照1个字节存储的,可以保存256个不同的值。
signed char取值范围是 -128 到 127
unsigned char 取值范围是 0 到 255

但是char究竟相当于signed char呢还是相当于unsigned char呢??
这就是char和int的不同之处!
int==signed int,但是char不能简单以为char ==signed char

比如Keil编译器就有一个选项明确的说明了这个问题。


要确定char究竟等同什么要基于不同的编译器做测试
大多数机器使用补码来存储整数,在这些机器中按照整数类型存储的-1的所有位均是1
假设我的机器也是如此存储,就能据此判断char究竟是等于signed char还是unsigned char

int main()
{
    char a=-1;
    signed char b=-1;
    unsigned char c=-1;
    printf("a=%d,b=%d,c=%d",a,b,c);
    return 0;
}

为了避免发生这种非常隐藏的错误,我们最好使用明确的signed char、unsigned char的数据类型定义,避免使用char。

keil  arm编译器会认为signedchar和char是两个不同的数据类型

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值