关于char类型的符号问题

不同的编译器对 char 类型是否带符号有不同的规定,也就是说,你在源程序里写的 charc ;可能会被编译器当作 signed charc 也可能被当作 unsigned char c .请编写程序,测试你用的编译器是怎样对待 char 类型的,如果当作带符号数,输出" signed ".如果当作无符号数,输出" unsigned ".


#include <stdio.h>

int main()
{
    char c = 128;
    if (c > 0)
        printf("unsigned");
    else 
        printf("signed");

    return 0;
}

char如果是unsigned 范围就是0255
是signed 范围 是-128
127
现在令char c = 128;
如果是signed 的 ,c就是-128


char c=128;
if(c>0)printf("unsigned");
else printf("signed");
  • 这篇文章:关于C语言的signed char 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: C语言 char 和 signed char的区别中的 总结: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1、char 在Keil编译器中被当作成了无符号的8位整数处理了。

    2、char变量避免与负值算术、逻辑运算。

    2、对于不同的编译器,对变量的编译处理方式有可能存在差异,建议使用统一头文件 stdint.h

    3、char一般用于存储字符数据,数值常量避免使用,用signed char和unsigned char代替,stdint.h定义了int8_t和uint8_t.