关于字符类型
编码规范的本质
计算机只能储存数字,不能存字符,如果我们要储存字符就要用到编码规范,当使用某个字符时,通过编码规范,把对应得到数字显示成它对应的字符,当我们要储存某个字符时,也是通过编码规范,储存它所对应的数字,编码规范就像一本字典,里面储存的是数字和字符一一对应的关系。
知识扩展*:计算机里面储存的都是数字,图片、影音、文件等都是以数字的形式储存在里面
字符类型
类型 | 内存占用(字节) | 说明 |
char | 1 | ASCII字符 |
wchar_t | 2 | 宽字节字符(采用utf-16标准或utf-32标准) |
char16_t | 2 | utf_16字符 |
char32_t | 4 | utf_32字符 |
在ASCII中,两个char才能显示中文,为了解决这个问题,引入了宽字节字符,一个wchar_t就能显示中文,在VS2019,采用utf-16标准,在其他编译器下,可能会采用其他标准,比如utf_32,并不稳定。另外它显示英文时也是占用两个字节
char
所有的char类型都是数字,都可以进行加减,只不过优先被表现成了字符
char charA {'A'};
char charA1 {65};
charA++;
std::cout<< charA <<charA1;
这两个charA输出后都是A
wchar_t
wchar_t wcharA {L'A'};
wchar_t wcharB {L'我'}
std::cout<<whcarA;
std::wcout<<wcharA;
std::cout<<wcharB;
std::cout<<sizeof(wcharA)<<sizeof(wcharB);
std::wcout<<wcharB;
赋值的时候前面都要加上L,用以表示这是个宽字节字符
第3行输出结果为65,说明cout不支持wchar_t的编码规范,仅支持char类型 的编码规范,要用wcout来输出
cout输出wcharB时,会输出25105,说明中文的数字编码比英文编码大很多
第6行输出了2和2,说明无论是中文还是英文,wchar_t都是2字节
最后一行wcout输出了一个空格,说明它输出中文时不支持,需要设置头文件
设置头文件
#include<locale>
#include<iostream>
setlocale(LC_ALL,"chs");
wchar_t wcharA {'我'};
std::wcout<<wcharA;
要想输出中文,要调用头文件locale,并且通过setlocale函数设置中文
char16_t、char32_t
char16_t char16 {u'a'};
char32_t char32 {U'A'};
前面加u,表示采用utf-16标准,前面加U,采用utf-32标准
wcout和cout都不支持16标准和32标准,所以用这两个输出后结果都为65
ASCII编码表
换行对应了10
std::cout<<A<<(char)10;
这里能换行
0对应了表里面的48
1对应了49
...
9对应了57
可以依照ACSII顺序给0-9进行排序,比如要给身份证号进行排序时,可以采用ASCII 表。