当您将不在 ASCII 图表上的字符转换为在 C++ 中键入 int 时会发生什么?

What happens when you cast a character that isn't on the ascii chart to type int in C++?

本文关键字:int 什么 C++ 转换 ASCII 字符      更新时间:2023-10-16

它有自己的值吗?某些字符会使程序崩溃吗?

假设sizeof(char) < sizeof(int)。对于下面的例子,让我们假设32位整数和2的完全拱形。

有符号字符或无符号字符强制转换为带符号整数表达式将导致相同的值提升为int。

无符号char强制转换为未符号int表达式将导致相同的值提升为无符号int。

有符号的char强制转换为无符号整数表达式可能会根据您对强制转换的看法而产生略微不同的行为。带符号的字符将首先升级为带符号的整数,这包括获得"带符号扩展"以保留任何负值。然后强制转换为unsigned。

后一种情况在塑造和宣传负面价值观时有一个有趣的副作用。

signed char c = 0x7f;  // 0x7f expressed as a signed char is 127
unsigned int n = c; // n gets 0x0000007f (127)

signed char c = 0xff;  // 0xff expressed as a signed char is -1
unsigned int n = c; // n gets 4294967295 (0xffffffff)

我之所以在上面明确地调用"signed char"与"unsigned char",是因为这个变量:

char c;

可以是有符号的,也可以是无符号的,这取决于编译器决定如何处理它。大多数编译器默认为有符号,但有一个编译器选项可以视为无符号。

我不得不修复一些错误,因为代码认为char的符号错误。