C++ 多字符常量变量的值是多少

C++ 多字符常量变量的值是多少,c++,char,C++,Char,我知道多字符字符常量表示为int。我知道它的值取决于编译器。但我的问题是,当我在char变量中存储一个多字符字符常量时,它将以不同的方式运行 #include <iostream> int main() { std::cout << 'asb'; return 0; } #包括 int main(){ std::cout您不按原样存储多字符常量的值。您将该值转换为另一个适合char范围的值。因为您也通过运算符的完全不同重载来打印该值,情况1: 您将获得

我知道多字符字符常量表示为
int
。我知道它的值取决于编译器。但我的问题是,当我在
char
变量中存储一个多字符字符常量时,它将以不同的方式运行

#include <iostream>

int main() {
    std::cout << 'asb';
    return 0;
}
#包括
int main(){

std::cout您不按原样存储多字符常量的值。您将该值转换为另一个适合
char
范围的值。因为您也通过
运算符的完全不同重载来打印该值,情况1:
您将获得
'a'*256²+'s'*256+'b'=6386530
因为
'a'=97
's'=115
'b'=98

参考Ascii表格

“asb”被解释为一个整数

typeid('asb').name()[0] == 'i' && sizeof('asd') == 4;
整数是32位,您可以在整数中存储“asb”(24位)。 这就是为什么std::cout将其解释为整数并显示6386530

还请注意:

  typeid('xxxxabcd').name()[0] == 'i' && sizeof('xxxxabcd') == 4;
但是'xxxxabcd'由64位表示,因此32位丢失

std::cout << 'xxxxabcd';
std::cout << 'abcd';

我猜行为取决于编译器。

在第二个示例中,文本是转换为字符的int。因此,这里有一些特定于实现的问题:

  • 多字符文字的解释
  • 字符是有符号的还是无符号的
  • 从整数到有符号字符的转换(如果字符是有符号的)

似乎正在发生的事情是,“asb”被解释为6386530,然后根据被截断。换句话说,6386530%256==97=='b'。

如果我想在变量中存储一个多字符字符常量,该怎么办?@oldMCdonald-您使用
int
来匹配常量的类型。实际上我不知道计算方法。256是ASCII字符数吗?是以256为基数计算的吗?我想了解更多信息resource@oldMCdonald,我完成了我的回答。Sry,没有文档,我只是写了一段代码来理解这种行为。ASCII表扩展到256个字符,但它过去是128个。此外re不是以256为基数的“计算”,它是以256为基数的解释。你的答案不是假设了一个小小的endian架构吗?(以及CHAR_BITS=8,但这并不重要,除非你溢出
int
),写一个可移植的代码来显示你的意图并且不会引起警告,不是更清晰吗?
std::cout << 'xxxxabcd';
std::cout << 'abcd';
warning: multi-character character constant [-Wmultichar] 
warning: multi-character character constant [-Wmultichar] In function 'int main()'
warning: overflow in implicit constant conversion [-Woverflow]