首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++中单引号引来字符/字符串的输出

2012-08-21 
C++中单引号引出字符/字符串的输出之前在复习C++时发现了一个问题,在C++中,如果有以下代码:cout好en

C++中单引号引出字符/字符串的输出

之前在复习C++时发现了一个问题,在C++中,如果有以下代码:     cout<<'好'<<endl;编译不会报错,输出结果为47811。再查看'好'的大小:     cout<<sizeof('好')<<endl; 输出结果为4。C++中采用的是GB2312编码方式,而实际结果与汉字占两个字节的言论不符。于是再测试如下代码:    char a[]="好";    cout<<sizeof(a)<<endl;输出的结果为3。也就是说在字符串中汉字是占用两个字符的(加上结束符'\0',一共大小是三字节)。经过上网搜索资料和个人的调试,发现C++中对于字符有这样的操作方式:将用单引号引起的部分看做一个字符。如如果输入:    cout<<'ab'<<endl;编译器是不会报错的,而是将'ab'看做为一个整体作为字符,输出的结果为24930。在C++内部是这样 运算的:a的ASC码是97,b的ASC码是98,经过运算97*256+98=24930。我认为,C++在处理用单引号         引出的多个字符时,用一个4字节大小的整数来表示。可以将上面所说的a看成是这个整体的高位,b看做是           低位,而256看做是权数(我猜想是由于ASC码中最多能表示255,就好比十进制中一位最大表示9,将10           作为权数一样。由此推出输出 '好' 时的机制。一个汉字是有两个字节表示的,每个字节范围在 161~255(-95~-1),于是编写如下代码设法输出汉字‘好’的编码。     char a[]="好";     cout<<int(a[0])<<int(a[1])<<endl;  输出的结果为-70-61,即‘好’的编码为256-70=186;256-61=195;即186 195;于是得出’好‘的最终 输出结果为186*256+195=47811。验证正确。C++中貌似这种机制输出的大小不超过4字节,否则会溢出。如输入:    cout<<'东南大学'<<endl;  输出结果为-1259089497。 如果对汉字编码不太了解的童鞋可以参考   http://www.cppblog.com/jacky2019/archive/2007/11/01/35693.html

热点排行