如何确认char到底是signed char还是unsigned char

signed -128~127
unsigned char 0~127
char -128 到 127 或 0 到 255

今天遇到一个问题,在新的开发板和环境下,同样的程序打印提示信息范围不对,某char字符打印出来是202,但协议范围是0到-100,怀疑是该编译工具链处理char是当做unsigned char来处理的。

下面通过如下程序交叉编译拷贝到设备验证char到底是signed char还是unsigned char

#include <stdio.h>

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;
}

打印结果
在这里插入图片描述
所以该编译工具链处理char是当做unsigned 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不能简单以为==signed char

-funsigned-char
-fno-signed-char
-fsigned-char
-fno-unsigned-char
这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前两个参
数)或者 signed char(后两个参数)

参考资料
http://bbs.chinaunix.net/thread-889260-1-1.html

发布了60 篇原创文章 · 获赞 43 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/mayue_web/article/details/100546176
今日推荐