char类型也是一种整型,他是专门用于存储字符(如 字母和数字)而设计的。存储程序对于计算机而言很容易,但是存储字母就是另一回事了,当然,后来便用字母的数值编码解决了。最常用的符号集是ASCLL字符集,char类型占8位,不同数值的个数满足基本字母,字符,小整数的个数。
#include <iostream> int main() { using namespace std; char ch = 'M'; int i =ch; //打印出M的ascll码值 cout<<"The ASCLL code for"<<ch<<"is "<<i<<endl; cout<<"Add one to the character code:"<<endl; ch = ch +1; i = ch; //打印M加1之后的ascll码值,以及对于的字符 cout<<"The ASCLL code for"<<ch<<"is "<<i<<endl; //用cout.put()打印ch代表的符 以及 字符常量 ‘!’ cout<<"Displaying char ch using cout.put(ch):" cout.put(ch); cout.put('!'); return 0; }说明: 将char型变量ch初始化为M,再把M的ascll码值初始化给i,其实存储的内容都是一样的,是77。char可以看做比short还短的整型。在下面将M和他的ascll码值打印出来。 再将M+1,赋值给ch,这时ch存储的是78,而i存储的也是78,再次打印出字符以及其对应的ascll码值,是N和78. 同样适用cout,且存储的值是一样的,为什么打印出来不一样? 因为cout是智能对象,值的类型将应道cout选择如何显示值。
成员函数cout.put( ) cout是一个对象,流对象,他是一个类的特定对象,通过特定对象能够使用该类的成员函数(如cout.put())。而这个‘.’ 就是成员运算符,用于使用成员函数。 cout.put()函数提供了另一种显示字符的方法,可以替代<<运算符。 注: 这是用于历史原因,在C++的release2.0版本之前,cout打印会将字符变量显示为字符,将字符常量显示为数字,那就考虑到用字符变量存储字符常量,再打印出来。问题是,C++的早期版本和C一样,也将字符常量存储为int类型,也就是说,'M’的编码被存储到一个16位或者32位的内存中,但是,char变量一般占8位。也就是说字符常量所占位数为字符变量的一半,如果你用字符常量赋值给字符变量,就会导致,只去前面8位进行赋值。
//release2.0版本之前 cout<<'M'; //打印出ascll码值77 cout.put('M'); //打印出M在C++的release2.0版本之后,字符常量也存储为char类型,这使得cout可以正常输出字符常量。
//release2.0版本之后 cout<<'M'; //打印出M cout.put('M'); //打印出M转义字符
字符名称ASCII符号C++代码十进制ASCLL码值十六进制ASCLL码值换行符NL(LF)\n100xA水平制表符HT\t90x9垂直制表符VT\v110xB退格BS\b80x8回车CR\r130xD振铃BEL\a70x7反斜杠\\\920x5C问号?\?630x3F单引号’\’390x27双引号"\"340x22-内容参考C++ Primer Plus
char ch = '\a'; cout<<ch<<"hello world\n"; cout<<"hello \"the world\" \n !!!";输出: hello “the world” !!! signed char和unsigned char signed char和unsigned char若表示数值范围,signed char表示范围为0~255,unsigned char表示范围为-128~127,。 wcha_t 在字符集无法用8位字节表示的时候,如日文汉字系统,C++可以使用较大的拓展字符集,这时wcha_t(宽字符类型),可以表示拓展字符集,他也是一种整数类型,他有足够的空间,去表示拓展字符集。 对于wchat_t的输出和输入,iostream中用wcin和wcout来对应处理wcha_t流。对于宽字符常量和宽字符串可以通过在前面添加前缀L来表示。
wchar_t ch = L'P'; wcout<<L"tall"<<endl<<ch;char16_t和char32_t char16_t和char32_t都是无符号类型的,前者长16位,后者长32位。用前缀u表示char16_t的字符常量和字符长常量,用U表示char32_t的字符常量和字符长常量.