`
QCheng5453
  • 浏览: 15939 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

    博客分类:
  • 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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics