一 前言 字符型变量存放的是字符,这个字符指的是计算机字符集中的字符(ASCII码)。字符型变量只占一个字节,我们知道一个字节为8位(二进制的8位),而最大的8位二进制数字为11111111,换算成十进制为255,因此字符型变量可存储256个字符,而一个字符可解释为0~255之间的一个数或某个ASCII码。
二 ASCII码
计算机用1和0的模式给它们做的任何事情编码,有时这些数为指令,有时这些数为一些值,有时则是代码,为了将它们区分开来,一种重要的标准化代码集ASCII产生,ASCII即American Standard Code for Information Interchange的缩写形式,译文为美国标准信息交换码。
它是由美国国家标准局(ANSI)制定,现已被国际标准化组织(ISO)定位国际标准,称为ISO 646准备。适用于所有拉丁文字母,ASCII码有7位码和8位码两种形式。
因为1位二进制数可以表示0和1两种状态,而2位二进制数可以表示00、01、10、11四种状态;依次类推,7位二进制数可以表示2的7次方,即128种状态,每种状态都可编为一个7位的二进制码,对应一个字符,因此128种状态可以表示128个字符。
第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL振铃等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等。
第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~126号为26个小写英文字母,其余为一些标点符号、运算符号等。
三 奇偶校验 3.1 概念
在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位用作奇偶校验位。
所谓奇偶校验,是指代码传送过程中用来校验是否出现错误的一种方法,一般分奇校验和偶校验两种。
奇校验规定:正确的代码一个字节中1的位数必须是奇数,若非奇数,则在最高位添1;
偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位添1
3.2 示例
比如说7位二进制数0101011,我们数了数其中总共有4个1,4是个偶数,假如采用偶校验,那么就要在最高位添0,也就是00101011.
刚才的讲解中我们了解到在ASCII中每个字符和标点都用一个7位二进制数表示,例如小写字母"a"用0110 0001表示。0110 0001的十进制为97,因此人们说字母"a"用ASCII码的97表示,而实际情况是97的二进制表示。01100001是字母"a"的编码,而97只是为了人们称呼起来方便。
四 字符型变量的定义与使用 4.1 代码 1 2 3 4 5 6 7 8 9 10 11 12 #include<iostream> using namespace std; int main() { char ch; ch='A'; cout<<ch<<endl; cout<<(int)ch<<endl; return 0; }
4.2 字符型变量 1 2 3 char ch; ch='A'; (int)ch;
该语句定义了一个字符型变量,它的名字为ch。
这样系统便为该变量分配了一个字节的空间,并将空间的地址赋给变量名ch。
ch='A' 该语句将大写字母A存储到变量名ch所代表的地址中。
(int)ch中,小括号中的int为所要转换的类型,称为强制类型转换
4.3 输出结果
4.4 延伸
在ASCII码中,大写字符A的值被设置为67,所有的大小写字母、数字、标点符号均被指定了一个介于1~128之间的数。另外的128个标志或者符号为计算机制造者保留或者用作奇偶校验位(最高位作为奇偶校验位)
五 练习 5.1 数值0与字符'0'还是有区别的 5.1.1 代码 1 2 3 4 5 6 7 8 9 10 #include<iostream> using namespace std; int main() { char ch=0,ch0='0'; cout<<"数字0的字符为:"<<ch<<"数字0的大小为:"<<(int)ch<<endl; cout<<"字符0的字符为:"<<ch0<<"字符0的大小为:"<<(int)ch0<<endl; return 0; }
5.1.2 结果 1 2 3 结果: 数字0的字符为: 数字0的大小为:0 字符0的字符为:0字符0的大小为:48
5.1.3 原因 说明:因为字符0的ASCII值为48,这实际上是将48这个值赋给ch,不过编译器会根据我们定义的char,自动将ASCII码值48转换为字符,这个转换过程是隐式的,我们看不到。
5.2 打印32到128之间的字符 5.2.1 代码 1 2 3 4 5 6 7 8 9 10 11 12 #include<iostream> using namespace std; int main() { for(int i=32;i<128;i++) { cout<<(char)i; } return 0; }
5.2.2 结果 1 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
5.3 特殊字符 5.3.1 代码 1 2 3 4 5 6 7 8 9 #include<iostream> using namespace std; int main() { cout << "特殊字符"; char ch = '\t'; cout << ch << "特殊用途"; return 0; }
5.3.2 结果
5.3.3 说明
'\t'的作用与按下键盘上的TAB键相同
由于反斜杠''改变了其后字母的含义,因此它又叫做转义字符
5.3.4 延伸
六 特殊字符
特殊字符
含义
\a
铃声(警报声)
\b
回退
\f
换页
\n
换行
\r
回车
\t
TAB键
\v
垂直制表
\'
单引号
\"
双引号
?
问号
\\
反斜杠
\000
八进制
\xhhh
十六进制