我知道表示为 int
的多字符字符常量。而且我知道它的值(value)取决于编译器。但我的问题是,当我将多字符字符常量存储在 char
变量中时,它的行为方式会有所不同。
#include <iostream>
int main() {
std::cout << 'asb';
return 0;
}
输出:6386530
#include <iostream>
int main() {
char a = 'asb';
std::cout << a;
return 0;
}
输出:b
最佳答案
案例 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';
会打印同样的东西。
案例 2: 'asb' 被解释为整数,您将其转换为 char(8 位)。 正如@BenjaminJones 指出的那样,只有最后 8 位 (98=='b') 被保存。 std::cout 将其解释为字符,因此它显示“b”。
无论如何,这两种情况都会引发编译警告,例如:
warning: multi-character character constant [-Wmultichar]
warning: multi-character character constant [-Wmultichar] In function 'int main()'
warning: overflow in implicit constant conversion [-Woverflow]
我想行为取决于编译器。
关于c++ - 多字符字符常量变量的值是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51135916/