c++ - 多字符字符常量变量的值是多少

标签 c++ char

我知道表示为 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/

相关文章:

c++ - 用 c_str() 设置一个字符数组?

用于游戏编程的 C++ - 爱还是不信任?

c++ - 将 mwArray 转换为 std::vector<double>

c - 如何在实模式下使用 C 字符数组

c++ - 将用户输入的空间存储在 char 数组中

c++ - 我无法理解 C++ 中 char 指针操作的索引

java - 如何使用 (input == '\n' ) 之类的东西来确定何时停止接受用户输入?

c++ - 为什么 `this`调用派生类对象时无法从基类方法访问派生类成员

C++:使方法每次都返回相同的对象

C++ 编译时出错