之前在复习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
分享到:
相关推荐
在SQL Server中,单引号(')是一个特殊字符,用于定义字符串常量。当在构建动态SQL语句时,如果查询条件中的变量包含了单引号,不进行特殊处理会导致SQL语法错误。以下是对标题和描述中所述知识点的详细解释: 1. ...
- **解析速度**:由于双引号字符串需要进行额外的解析以识别变量和转义序列,因此,单引号字符串通常比双引号字符串更快。在处理大量字符串或嵌套变量的情况下,使用单引号可能会带来微小的性能提升。 4. **HTML...
例如,如果你想在脚本中输出一个固定的字符串,你可以使用单引号;如果你想要输出一个变量的值,则需要使用双引号。 ```bash #!/bin/bash var="example value" echo 'This is a fixed string.' echo "The ...
只要在定义字符串时保持引号的一致性,即开闭引号一致,不管是单引号还是双引号都是有效的。在JavaScript中,无论使用单引号还是双引号,字符串内的变量或特殊字符都不会被自动解析或转换。如果需要在字符串中包含...
相反,双引号字符串会解析并替换其中的变量,所以`"I am $age years old"`会输出"I am 20 years old"。 此外,性能也是一个重要的考虑因素。由于PHP在处理单引号字符串时不进行变量解析,因此使用单引号通常会有更...
单引号和双引号 截然不同,单引号 表示 字符,双引号 表示 字符串。 Python语言 两者都可以用,不用区别,都是字符串。 Matlab语言 早期的版本,只能用 单引号,表示的是字符串。双引号用不成,会报错。 从 R2017a ...
1:字符串是由单引号引用 2:转义。 单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为转义符,如果第二个单引号后面还有单引号(哪怕只有一个)。...
在 SQL 中,单引号(')和双引号(")都是用来表示字符串的界限符。单引号通常用来表示文本型字段值的界限,而双引号则用来表示字符串的界限。 二、SQL 语句中的单引号和双引号 在 SQL 语句中,双引号通常用来表示...
- **双引号**:`"` 使用双引号创建字符串的方法与单引号类似,当字符串中包含双引号时,同样可以使用转义字符 `\` 来解决潜在的问题。例如: ```python print("He said, \"Hello, world!\"") ``` #### 三、三...
在SQL语句中,单引号和双引号的处理方式是至关重要的,尤其是在处理字符串、数字、日期和布尔值时。以下是对SQL语句中单引号和双引号处理方法的详细解释: 1. **插入字符串型数据**: 当你需要插入字符串类型的...
本篇将详细探讨如何实现一个统计字符串中不同字符个数以及每个字符出现次数的函数,我们将以C++语言为例进行讲解。 首先,我们需要了解基本的字符串处理函数和数据结构。在C++中,`std::string` 是用来表示字符串的...
在C语言中,单引号`'`和双引号`"`用来表示不同的数据类型,它们之间的区别至关重要,尤其在处理字符串和字符时。这里我们将深入探讨这两种引用方式的差异,并结合一个具体的问题——从字符串中提取IP地址,来阐述...
字符串可以由单引号('')或双引号(" ")包围,但它们之间存在关键性的区别,这些差异主要体现在变量解析、转义序列处理以及多行字符串定义上。 ### 变量解析 **双引号(" ")**: 当使用双引号包围字符串时,PHP会解析...
- 单引号字符串不解析变量,所以 `'foo is $foo'` 会原样输出。 - 转义字符在单引号字符串中仅用于插入单引号(\')和反斜线(\\)。在双引号字符串中,转义字符可以用于插入多种特殊字符,如换行符(\n)。 - ...
在SQL语句中,单引号的嵌套和转义是一个常见的问题,特别是在处理字符串时。这是因为SQL使用单引号来定义字符串的开始和结束。当你需要在字符串内包含一个单引号时,直接嵌套单引号会导致语法错误。在标题和描述中...
在JavaScript编程中,字符串的界定通常使用单引号(')或双引号(")来标识。不过,在某些情况下,单引号与双引号可能会造成冲突,尤其是在字符串内需要包含另一种引号时。如果不妥善处理这种冲突,很容易导致JavaScript...
另一种方法是使用 ADODB.COMMAND 对象,把含有单引号的字符串传递给 COMMAND,然后执行查询等操作。下面是一个示例代码: ```vb Private Sub Command2_Click() ' 演示参数处理 Dim parm As ADODB.Parameter ...