gpt4 book ai didi

c++ - 字符值 = 'abcd'。使用多字符 char

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:17 27 4
gpt4 key购买 nike

我对编译器如何处理具有多个字符的 char 变量感到困惑。我知道 char 是 1 个字节,它可以包含一个字符,如 ASCII。

但是当我尝试时:

char _val = 'ab';
char _val = 'abc';
char _val = 'abcd';

它们编译得很好,当我打印 _val 时,它总是打印最后一个字符。但是当我这样做的时候

char _val = 'abcde';

然后我得到一个编译器错误:

Error 1 error C2015: too many characters in constant

所以我的问题是:

  1. 为什么在使用多个字符时编译器总是取最后一个字符?这种情况下的编译机制是什么。
  2. 为什么当我输入 5 个字符时出现字符过多错误。 2 个字符超出了 char 可以处理的范围,为什么是 5 个?

我正在使用 Visual Studio 2013。

谢谢。

最佳答案

[lex.ccon]/1:

An ordinary character literal that contains more than one c-char is a multicharacter literal. A multicharacter literal [..] is conditionally-supported, has type int, and has an implementation-defined value.


Why does the compiler always takes the last character when multiple characters are used? What is the compiler mechanism in this situation.

大多数编译器只是按顺序将字符值一起移动:这样最后一个字符占据最低有效字节,倒数第二个字符占据最低有效字节旁边的字节,依此类推。
IE。 'abc'相当于 'c' + ((int)'b')<<8) + (((int)'a')<<16) (Demo)。

正在转换 int回到char将有一个实现定义的值——这可能只是从 int 的值中产生的模 256。这只会给你最后一个字符。

Why did I get a too many characters error when I put 5 characters. 2 characters is more than what a char can handle so why 5?

因为在你的机器上有一个 int大概是四个字节大。如果上面确实是你的编译器排列多字符常量的方式,他不能把五个 char值转换为 int .

关于c++ - 字符值 = 'abcd'。使用多字符 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com