C语言学习栏目目录

目录

4.1 int类型介绍

4.2 char类型介绍

4.3 float、double类型介绍

4.4 小结及其他数据类型简单介绍

4.5 类型大小


char类型用于储存字符(如,字母或标点符号),但是从技术层面看,char是整数类型。因为char类型实际上储存的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。美国最常用的编码是ASCII编码,本书也使用此编码。例如,在ASCII码中,整数65代表大写字母A。因此,储存字母A实际上储存的是整数65(许多IBM的大型主机使用另一种编码——EBCDIC,其原理相同。另外,其他国家的计算机系统可能使用完全不同的编码)。

标准ASCII码的范围是0~127,只需7位二进制数即可表示。通常,char类型被定义为8位的存储单元,因此容纳标准ASCII码绰绰有余。许多其他系统(如IMB  PC和苹果Macs)还提供扩展ASCII码,也在8位的表示范围之内。一般而言,C语言会保证char类型足够大,以储存系统(实现C语言的系统)的基本字符集。

许多字符集都超过了127,甚至多于255。例如,日本汉字(kanji)字符集。商用的统一码(Unicode)创建了一个能表示世界范围内多种字符集的系统,目前包含的字符已超过110000个。国际标准化组织(ISO)和国际电工技术委员会(IEC)为字符集开发了ISO/IEC 10646标准。统一码标准也与ISO/IEC 10646标准兼容。C语言把1字节定义为char类型占用的位(bit)数,因此无论是16位还是32位系统,都可以使用char类型。

1.声明char类型变量

char类型变量的声明方式与其他类型变量的声明方式相同。下面是一些例子:

char grade;
char temperature,humidity;

以上声明创建了3个char类型的变量:grade、temperature和humidity。

2.字符常量和初始化

如果要把一个字符常量初始化为字母 A,不必背下 ASCII 码,用计算机语言很容易做到。通过以下初始化把字母A赋给grade即可:
char grade = 'A';
    在C语言中,用单引号括起来的单个字符被称为字符常量(character constant)。编译器一发现'A',就会将其转换成相应的代码值。单引号必不可少。下面还有一些其他的例子:

char temperature;           //声明一个char类型的变量
temperature = 'T';           // 为其赋值,正确
temperature= T;             //错误!此时T是一个变量
temperature= "T";            //错误!此时"T"是一个字符串 

如上所示,如果省略单引号,编译器认为T是一个变量名;如果把T用双引号括起来,编译器则认为"T"是一个字符串。字符串的内容将在后续中介绍。实际上,字符是以数值形式储存的,所以也可使用数字代码值来赋值:

char grade = 65;//对于ASCII,这样做没问题,但这是一种不好的编程风格 

在本例中,虽然65是int类型,但是它在char类型能表示的范围内,所以将其赋值给grade没问题。由于65是字母A对应的ASCII码,因此本例是把A赋给grade。注意,能这样做的前提是系统使用ASCII码。其实,用'A'代替65才是较为妥当的做法,这样在任何系统中都不会出问题。因此,最好使用字符常量,而不是数字代码值。

3.非打印字符

单引号只适用于字符、数字和标点符号,浏览ASCII表会发现,有些ASCII字符打印不出来。例如,一些代表行为的字符(如,退格、换行、终端响铃或蜂鸣)。C语言提供了3种方法表示这些字符。第1种方法前面介绍过——使用ASCII码。例如,蜂鸣字符的ASCII值是7,因此可以这样写:
char beep = 7;
第 2 种方法是,使用特殊的符号序列表示一些特殊的字符。这些符号序列叫作转义序列(escape sequence)。表3.2列出了转义序列及其含义。把转义序列赋给字符变量时,必须用单引号把转义序列括起来。例如,假设有下面一行代码:
char nerf = '\n';
稍后打印变量nerf的效果是,在打印机或屏幕上另起一行。

现在,我们来仔细分析一下转义序列。使用C90新增的警报字符(\a)是否能产生听到或看到的警报,取决于计算机的硬件,蜂鸣是最常见的警报(在一些系统中,警报字符不起作用)。C标准规定警报字符不得改变活跃位置。标准中的活跃位置(active position)指的是显示设备(屏幕、电传打字机、打印机等)中下一个字符将出现的位置。简而言之,平时常说的屏幕光标位置就是活跃位置。在程序中把警报字符输出在屏幕上的效果是,发出一声蜂鸣,但不会移动屏幕光标。接下来的转义字符\b、\f、\n、\r、\t和\v是常用的输出设备控制字符。了解它们最好的方式是查看它们对活跃位置的影响。换页符(\f)把活跃位置移至下一页的开始处;换行符(\n)把活跃位置移至下一行的开始处;回车符(\r)把活跃位置移动到当前行的开始处;水平制表符(\t)将活跃位置移至下一个水平制表点(通常是第1个、第9个、第17个、第25个等字符位置);垂直制表符(\v)把活跃位置移至下一个垂直制表点。这些转义序列字符不一定在所有的显示设备上都起作用。例如,换页符和垂直制表符在PC屏幕上会生成奇怪的符号,光标并不会移动。只有将其输出到打印机上时才会产生前面描述的效果。接下来的3个转义序列(\\、\'、\")用于打印\、'、"字符(由于这些字符用于定义字符常量,是printf()函数的一部分,若直接使用它们会造成混乱)(看不懂可忽略)

4.打印字符

printf()函数用%c指明待打印的字符。前面介绍过,一个字符变量实际上被储存为1字节的整数值。因此,如果用%d转换说明打印 char类型变量的值,打印的是一个整数。而%c转换说明告诉printf()打印该整数值对应的字符。下面程序清单演示了打印char类型变量的两种方式。

/************************************************************************
功能:显示字符A的ASCII值
函数说明
ch:字符A
************************************************************************/#include <stdio.h>
int main(void)
{char ch = 'A';printf("The code for %c is %d.\n", ch, ch);system("pause");return 0;
}

运行该程序后,输出示例如下:

The code for C is 67.

printf()函数打印ch的值两次,第1次打印一个字符(对应代码中的%c),第2次打印一个十进制整数值(对应代码中的%d)。

5.有符号还是无符号

有些C编译器把char实现为有符号类型,这意味着char可表示的范围是-128~127。而有些C编译器把char实现为无符号类型,那么char可表示的范围是0~255。请查阅相应的编译器手册,确定正在使用的编译器如何实现char类型。或者,可以查阅limits.h头文件。下一章将详细介绍头文件的内容。根据C90标准,C语言允许在关键字char前面使用signed或unsigned。这139
样,无论编译器默认char是什么类型,signed  char表示有符号类型,而unsigned  char表示无符号类型。这在用char类型处理小整数时很有用。如果只用char处理字符,那么char前面无需使用任何修饰符。

源码下载

不懂可以留言,我看到会回复

4.2 char类型介绍相关推荐

  1. 4.1 int类型介绍

    C语言学习栏目目录 目录 4.1 int类型介绍 4.2 char类型介绍 4.3 float.double类型介绍 4.4 小结及其他数据类型简单介绍 4.5 类型大小 C语言提供了许多整数类型,为 ...

  2. Java基础—char类型数据

    char类型介绍 char类型原本表示单个字符,但由于Unicode字符集扩充,导致有些字符需要使用两个char来描述 大小: 一个char类型占两个字节,16位 范围: 为十进制数 0 ~ 6553 ...

  3. C语言字符意思 char,C语言基本类型字符型(char)用法介绍

    <C语言基本类型字符型(char)用法介绍>由会员分享,可在线阅读,更多相关<C语言基本类型字符型(char)用法介绍(6页珍藏版)>请在人人文库网上搜索. 1.C语言基本类型 ...

  4. 常用char 类型函数的介绍

    昨天学习了C语言的几种常用的变量类型,今天整理一下两对常用的char类型输入输出的函数,与大家共同学习,刚开始接触,需要学习的地方很多,欢迎感兴趣的同学交流指导. 首先我们来看第一对getchar() ...

  5. 8位alu运算器(vhdl语言)_C语言中signed char类型,能表示-128到127,为什么负数多一位?...

    初学者在学习C语言,谈到不同数据类型时,一般都能理解 unsigned 和 signed 的区别,无非就是有无符号而已.但是对于 signed 数据类型的数据范围,初学者却常常会感到迷惑. 对于 si ...

  6. C++中char类型的溢出问题

    C++中什么经常会运用到char类型,也会将char类型作为循环语句的循环条件,但往往这里最容易出现错误,容易出现溢出,进入死循环.这里我们就来简单介绍下为什么会出现这种情况. 首先,了解下char类 ...

  7. c char*转int_C语言中的char类型也有signed和unsigned?字符也有正负之分吗?

    C语言中的 unsigned int 和 signed int 类型的区别,相信即使是初学者也是清楚的,无非就是最高位是否用来做符号位而已.但是最近有读者问我,为什么 char 类型也要区分 unsi ...

  8. java char类型空值_展望Java的未来:空值类型

    java char类型空值 尽管有前途的Java值类型不是迫在眉睫,但我偶尔还是喜欢在OpenJDK valhalla-dev邮件列表中打听一下,以了解事情的进展情况并了解即将发生的事情. 诚然,由于 ...

  9. c语言中char的取值扩大,C语言中 char 类型的取值范围为什么是-128~127

    我们之前已经说过关于原码.反码和补码的一些东西,如果你没有看过,可以点这里< 你知道原码.反码和补码吗,进来了解一下吧 >看一下 . 好了,可能你不会太想看,所以我们一起再来简单的复习一下 ...

最新文章

  1. 【建模必备】遗传算法的基本原理与步骤(适应度函数与适应度分配)
  2. 显著性图matlab,cvpr14_saliency_code 2014上的关于图像显著性区域的检测matlab代码。 271万源代码下载- www.pudn.com...
  3. nvidia-smi 实时刷新 实时显示显存使用情况
  4. mysql的字符串处理函数
  5. python比较两个二进制文件_python三种方法判断文件是否为二进制文件
  6. php echo 前后有字符串,php echo 输出字符串函数详解、多行输出方法
  7. 技术员联盟Win11 64位官方全新旗舰版镜像V2021.08
  8. 如何用Pygame写游戏(十一)
  9. paip.oracle10g dmp文件导入总结
  10. python中合法命名的变量名_「变量名」python中变量的命名以及使用 - 金橙教程网...
  11. python模块库下载_Python及其常用模块库下载及安装
  12. 关于上传文件到ftp服务器报错553 could not create file.
  13. Python编程:从入门到实践(课后习题:第6章 字典)
  14. 什么是接口测试?十年阿里测试人教你怎样做接口测试
  15. Nginx 设置域名转发到指定端口
  16. Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  17. 奇异量子物理系统:它既在“绝对零度”之下,又在“绝对高温”之上
  18. 使用axios进行下载Excel文件
  19. POI Excel 06 合并单元格,设置字体样式
  20. 如何去掉微软正版的产品验证提醒

热门文章

  1. AndroidStudio问题XML格式化
  2. 入门产品经理的7个实用方法
  3. 怎样用matlab做复数运算,MATLAB面向复数运算的设计.doc
  4. JDK中文API帮助文档【沈东良】
  5. MFRC522_管脚示意图
  6. SEO每天都是动态变化的,你要关注什么?
  7. 学会Python如何利用业余时间赚外快?分享几个接单途径
  8. find、文件后缀及linux与Windows互传
  9. ArcGIS:如何利用栅格数据进行路径网络分析-可达性分析?
  10. 华为P10手机有计算机功能吗,手机教程知识:华为P10支持NFC功能吗 华为P10新功能介绍...