存储英文字母需要用到字符型变量。C 和 C++ 将字符类型看成是一种短整型,每个字符数据对应一个整数值。
字符变量用来存储字符,一个字符占1个字节(8位),字符存储的其实是 ASCII 码表中所对应的整数,这些整数以 0、1 串来表示。
例如:‘A’的 ASCII 码是65,对应的8位二进制 0-1 串是 01000001。
【 1. 分类 】
C 和 C++ 中有3种字符类型:char 、signed char 和 unsigned char。
【 2. 字符的加减运算 】
-
由于 C 和 C++ 将字符类型作为整数处理,所以可以通过修改一个字符变量中的整数值来修改其中的字符。
-
在 ASCII 码表中26个大写英文字母是连续顺序排列的,也就是说字符‘B’代表的整数比字符‘A’代表的整数值大1,…… ,字符‘Z’代表的整数值比字符‘Y’代表的整数值大1,所以可以有下面的程序
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void)
{
char ch = 'B'; // 定义字符变量 ch 并初始化为字符 B ,ch中存储的是 B 对应的整数
ch = ch + 3; // 将 ch 中的整数加 3
cout << ch << endl;
return 0;
}
【 3. 字符的位运算 】
我们可以使用按位与运算判断一个字符的二进制表示(共8位)的某一位是1还是0。
- 例如下面的语句输出了字符变量 c 的二进制表示的第7位的值(c 的二进制表示有8位,从左到右分别为第 1 ~ 8 位):
cout << (int)(bool)(c & 0x02);
//该表达式有三个运算符:强制类型转换( int )、强制类型转换( bool )和按位与运算符 &。
-
因为括号的原因,表达式先计算c & 0x02。0x02 是十六进制的02,其二进制表示为 00000010 。将 c 和 0x02 进行按位与,除了第7位外,不需要管 c 的其它位是什么,因为 0x02 除了第7位,其它位都是0。那么就有,如果 c 的第7位如果是1,则按位与的结果就是 00000010,否则结果为 00000000。
-
然后再进行两个类型转换运算,优先级相同,右结合,所以再计算(bool)(c & 0x02),即将计算结果转换为 bool 类型。如果c & 0x02的值为 00000000,则结果为 false,否则结果为 true(即只要有一位不为0,则整个十六进制数转换后即为 true)。最后再把计算结果转换为 int 类型,即如果前面的计算结果是 true,转换结果就是1,否则是0。
-
所以整个表达式的运算效果是:如果 c 的第7位为0,就输出0,第7位数为1则输出1。以此类推,我们就可以计算出 c 对应的二进制8位 0-1 串了。
【 4. 三目运算符 】
C 和 C++ 有一个三目运算符,它的一般形式为:
<表达式1> ? <表达式2> : <表达式3> ;
- 含义:
先计算<表达式1>的值,如果为 true(非0),则计算<表达式2>的值,并把该值作为整个表达式的值;如果为 false(为0),则计算<表达式3>的值,并把它作为整个表达式的值。
更直观的表示如下:
if(表达式1)
表达式2
else
表达式3
- 例如:
下面的表达式中,如果 ch 是大写字母,则把 ch 赋值给 x,否则把字符 A 赋值给 x。其计算过程为:先计算条件表达式ch>=‘A’ && ch<=’Z’的值(由于 ACSII 码表中大写字母都是连续排列的,如果满足该条件,则 ch 必然是某一个大写字母)。如果结果为真,则将 ch 的值作为右边表达式的值赋值给 x ;如果为假,则将字符 A 作为右边表达式的值赋值给 x。
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void)
{
char ch = 'B'; // 定义字符变量 ch 并初始化为字符 B ,ch中存储的是 B 对应的整数
ch = ch + 3; // 将 ch 中的整数加 3
cout << ch << endl;
return 0;
}
今天的文章字符型数据分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/9286.html