编译器如何识别多个字符的ASCII码

时间:2016-12-21 15:23:25

标签: c++ character ascii

int var;
var=' ';       // this is a single space
cout << var;   // prints 32
var = '  ';    // double space
cout << var;   // prints 8224. Why?

编译器如何计算两个空格(8224)?

每个多字符文字都会出现这种情况。

2 个答案:

答案 0 :(得分:0)

这就是C ++标准N3690提到的关于多字符文字的内容:

  

包含多个c-char的普通字符文字是多字符字面值。包含单个c-char的多字符文字或普通字符文字,在执行字符中无法表示   set,有条件支持,类型为int,并且具有实现 - 定义的值。

所以答案是相应的int值是特定于实现的

对于单字面文字:

  

包含执行字符集中可表示的单个c-char的普通字符文字具有char类型,其值等于执行字符集中c-char编码的数值。

答案 1 :(得分:0)

c ++中的char是字节(可能的int值从 0 255 )。 所以在你的情况下你投下两个白色空间&#39; &#39;在幕后,它只是 base-256转换。更确切地说:

  • 白色空间&#39; &#39;的ASCII值为32。
  • 因此,两个空格将被转换为一个int:32 + 256 * 32 = 8224.

修改

  • 这是你的两个字符在内存中的表示方式,其中一个字符块是一个字节,其值可以是0-255: 的 |炭|炭|
  • 当你将这两个块转换为int时,你进行base-256转换,即右char块的ASCII,即32乘以256 ^ 0。然后是下一个char块的ASCII,即32乘以256 ^ 1。
  • 第2步依赖于实现,如@ saurav-sahu所提到的,例如:如果是big endian or little endian

  • 我试图让你对系统背后的内容有所了解,但正如pete_becker正确指出的那样,它是高度针对具体实施的,例如: char类型可以解释为有符号或无符号值,依此类推。