之前在复习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
分享到:
相关推荐
‘ ‘单引号里面的不进行解释,直接输出。 单引号解析的时间比双引号快 。 单引号支持\转义符,双引号支持的转义符更多 。 $hello= 3; echo "hello is $hello"; // 打印结果:hello is 3 echo 'hello is $hello'...
而采用非绑定方式时许多程序员大都忽略了对单引号的特殊处理,一旦SQL语句的查询条件的变量有单引号出现,数据库引擎就会报错指出SQL语法不对,本文为大家介绍两种可以解决和处理这种单引号的问题的方法(以VB为例子...
单引号和双引号 截然不同,单引号 表示 字符,双引号 表示 字符串。 Python语言 两者都可以用,不用区别,都是字符串。 Matlab语言 早期的版本,只能用 单引号,表示的是字符串。双引号用不成,会报错。 从 R2017a ...
1:字符串是由单引号引用 2:转义。 单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为转义符,如果第二个单引号后面还有单引号(哪怕只有一个)。...
c++中单例模式对象的释放控制,txt文件格式的,哈哈哈
在PHP中,我们可以使用单引号或者双引号来表示字符串。不过我们作为开发者,应该了解其中的区别。单引号与双引号对于定义字符一个是可以解析变量一个是会把变量直接输出来,同时单引号与双引号在字符处理上单引号要...
本文向我们简单介绍了php中单双引号的区别,以及对比了下javascript中单引号和双引号的区别,方便我们更好的理解,非常实用,推荐给大家
详细解释了linux系统命令行和脚本编程中的引号的使用,对于命令运行机制的理解很有帮助
主要介绍了python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
假如有下述表格: mytabe 字段1 username 字符串型(姓名) 字段2 age 数字型(年龄) 字段3 birthday 日期型(生日) 字段4 marry 布尔型(是否结婚,结婚为True,未结婚为False) 字段5 leixing ...
但是必须使用同一种单或双引号来定义字符串,如:’Hello World”和”Hello World’为非法的字符串定义。 单引号和双引号到底有啥区别呢?下面通过本文学习一下吧。 1、定义字符串 在PHP中,字符串的定义可以使用...
许多程序员以为在PHP中单引号和双引号是一样的,其实这要...所以如果内部只有纯字符串的时候,用单引号(速度快),内部有别的东西(如变量)的时候,用双号引会更灵活些。 PHP双引号小隐患 PHP很多语法特性会让攻击者有机可乘,
SQL中存储过程中SQL语句的单引号和双引号问题[总结].pdf
MS-SQL Server 中单引号的两种处理方法
字符串统计函数,统计不同字符个数和每个字符出现的次数。用一个简单的数据结构做的,注释很清楚。
问题:从c++文件中将std:string转换为char*后,返回包含IP地址的char*,需要将该字符串char*中的IP地址提取出来; 解决办法:1. 解决思路:IP地址最长为12字符+3句点=15字符,一般性表示为192.168.111.111;可以从第...
PHP页面中如果不希望出现以下...PHP中单引号与双引号的区别分析php 输出双引号"与单引号”的方法PHP 单引号与双引号的区别PHP的单引号和双引号 字符串效率php 防止单引号,双引号在接受页面转义分析PHP中单双引号的误区
介绍了js中单引号与双引号冲突问题解决方法,有需要的朋友可以参考一下