C 中 char、signed char 和 unsigned char 的区别

来源: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_BIT8

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

# define SCHAR_MAX127

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

/*Minimum and maximum values a `char' can hold.*/# ifdef __CHAR_UNSIGNED__

# define CHAR_MIN0# 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 < 0typedef signedcharunderlying_char_type;#elsetypedef unsignedcharunderlying_char_type;#endif

test_char.c

#include

intmain(void)

{char a = -1;

signedchar b = -1;

unsignedchar c = -1;

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

}

output

# ./test_char.elf

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

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

以上就是C 中 char、signed char 和 unsigned char 的区别的全部内容。

c# char unsigned_C 中 char、signed char 和 unsigned char 的区别相关推荐

  1. 'unsigned char'-C编程中的声明,赋值和用法

    char is a data type in C programming language which can store value from -128 to +127. It generally ...

  2. linux 下byte,char,unsigned char的区别

    在linux中,对byte的定义为无符号char,而char默认为有符号char. #ifndef BYTE #define BYTE unsigned char #endif 以下ZZ百度知道: 在 ...

  3. 基于C语言char与unsigned char的区别介绍

    在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别. 首先在内存中,char与unsigned char没有什么不 ...

  4. 【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Visual Studio 2019 中编译 Android NDK , 构建方式参考 [Android 逆向]Android 进程注入工具开发 ...

  5. 用cout输出uchar(unsigned char)变量时,没有输出结果怎么办?

    在OpenCV中uchar实际上就是unsigned char,其定义如下: typedef unsigned char uchar; 在图像处理中,我们经常用unsigned char代表我们的灰度 ...

  6. unsigned char型整数

    在一些大型的公司编码项目中,喜欢用unsigned char来定义部分整数. 原因有两点: 1.char类型本来是用来存储字母和字符的,但是在技术实现上char却是整数类型,这是因为char类型实际存 ...

  7. 2字节char转16进制unsigned char或者int

    在C语言中,常常需要将txt文件转换成bin文件,所以需要将两字节的字符,转换成16进制的unsigned char类型.有时也会将int型转换成两字节的char,还原时也需要转换. /*! @Bri ...

  8. 嵌入式开发中对(*(volatile unsigned long *)) 的理解

    一.说明 (*(volatile unsigned long *)) 这个语句对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的.如果系统结构支持独立的IO地址空间,并且是端口映射,就必 ...

  9. 不同编译器中,char的默认类型是signed char还是unsigned char它们遵循的原则是什么?

    不同编译器中,char的默认类型是signed char还是unsigned char它们遵循的原则是什么?

最新文章

  1. 央视曝光:股市暴跌暴涨,投资的安全感在哪里?
  2. Struts2国际化文件乱码解决
  3. CNCF 沙箱项目 OCM Placement 多集群调度指南
  4. bga焊盘怎么做_BGA封装的类型及焊盘设计的基本要求有哪些
  5. php投票系统报告,投票系统设计
  6. [商业]文件文件夹对比合并工具Araxis Merge
  7. C 线程的使用~(下)
  8. BZOJ3110: [Zjoi2013]K大数查询(整体二分)
  9. android listpreference 自定义,Android ListPreference的用法一
  10. 让cp显示进度的脚本
  11. hihoCoder - 1075 开锁魔法III
  12. 利用域策略设置域用户IE主页设置
  13. java开发spc分析软件,SPC、五大工具带你深入实战......OMG,收藏!
  14. 2022-05-25 网络测试软件PingTools
  15. PHP如何判断图片是否伪造
  16. seo站长,必备批量工具
  17. 重庆万州公交车坠江原因公布:乘客与司机激烈争执互殴致车辆失控
  18. Normalize.css 支持 HTML5 的CSS Reset
  19. TalkingData :如何做到30分钟内完成对数十亿受众数据的分析 | 会员专栏
  20. unity项目之太空大战(2)

热门文章

  1. java中对时间的操作
  2. 自己闲来无事做的工作日志WEB程序(VB.NET)
  3. Postman操作使用
  4. 物联网os_用于物联网的FireFox OS,NextCloud公告以及更多新闻
  5. MySQL SQL语句知识点总结
  6. Spring Boot数据校验
  7. Git笔记(9) 打标签
  8. Python笔记(1) Python简介
  9. elasticsearch aggregations_Elasticsearch聚合的嵌套桶如何排序
  10. php 微信实时更新,微信小程序修改data使页面数据实时更新的代码示例