• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C中char、signedchar和unsignedchar的区别

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

来源:http://bbs.chinaunix.net/thread-889260-1-1.html

参考:https://publications.gbdirect.co.uk//c_book/chapter2/integral_types.html

 

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


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

 

编译器提供以下参数来对char类型进行设置,
-funsigned-char : 设置为 unsigned char
-fno-signed-char : 设置为 非 signed char
-fsigned-char : 设置为 signed char
-fno-unsigned-char : 设置为 非 unsigned char

 

limits.h

/* Number of bits in a `char'.    */
#  define CHAR_BIT    8

/* Minimum and maximum values a `signed char' can hold.  */
#  define SCHAR_MIN    (-128)
#  define SCHAR_MAX    127

/* Maximum value an `unsigned char' can hold.  (Minimum is 0.)  */
#  define UCHAR_MAX    255

/* Minimum and maximum values a `char' can hold.  */
#  ifdef __CHAR_UNSIGNED__
#   define CHAR_MIN    0
#   define CHAR_MAX    UCHAR_MAX
#  else
#   define CHAR_MIN    SCHAR_MIN
#   define CHAR_MAX    SCHAR_MAX
#  endif

 

/* The character type that char matches (i.e., signed or unsigned)
 */
#if CHAR_MIN < 0
typedef signed char underlying_char_type;
#else
typedef unsigned char underlying_char_type;
#endif

 

test_char.c

#include <stdio.h>

int main(void) 
{
    char a = -1;
    signed char b = -1;
    unsigned char c = -1;

    printf("a=%d, b=%d, c=%d\n", a, b, c);
    return 0;
}

 

output

# ./test_char.elf 
a=-1, b=-1, c=255 // 从这里可以看出 默认的 char 类型就是 signed char 类型

 

 

============ End

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#--web中上传图片与浏览发布时间:2022-07-13
下一篇:
c#关机发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap