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

How compiler identifies the ASCII code of multiple characters

本文关键字:字符 ASCII 代码 何标识 标识 编译器      更新时间:2023-10-16
int var;
var=' ';       // this is a single space
cout << var;   // prints 32
var = '  ';    // double space
cout << var;   // prints 8224. Why?

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

这都会发生在每个多字符文字中。

这是C 标准N3690提到的有关多学术文字的内容:

一个普通字符字面包含一个以上的C-char是多章字面的字面。多曲目文字或一个普通字符字面包含一个Char在执行字符中不可用的单个C-Char 设置,有条件地支撑,具有INT类型,并且具有实现定义的值。

因此,答案是相应的int值是实现特异性

对于单char文字:

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

c 中的char是 byte (具有 0 的可能INT值,到 255 )。因此,在您的情况下,当您将两个白色空间施放到一个int上时,在场景后面只是 base-256转换。更准确:

  • 白色空间'的ASCII为32。
  • 所以,两个白空间将被施放为:32 256*32 = 8224。

编辑

  • 这是您的两个字符在内存中表示的方式,其中一个字节是一个字节,它的值可以在0-255中的值: | char |char |
  • 当您将这两个块投入到一个int时,您会进行基本256转换,即右char块的ASCII,即32我们乘以256^0。然后是下一个char块的ASCII,即32我们乘以256^1。
  • 步骤2。是实现依赖性 as @saurav-sahu提到,例如如果是大的endian或小末日。

  • 我试图为您提供系统背后的内容的直觉,但是正如Pete_Becker正确指出的那样,它是高度实现的特定于,例如。Char类型可以解释为签名或未签名的值,依此类推。