繁体   English   中英

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

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

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

假设sizeof(char) < sizeof(int) 对于下面的示例,我们假设32位整数和2的完整弧线。

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

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

根据您对转换的看法,将带符号的char转换为无符号的整数表达式可能会有稍微不同的行为。 带符号的字符将首先提升为带符号的整数-其中包括“带符号扩展”以保留任何负值。 然后转换为未签名。

在投射和提升负值时,后一种情况具有有趣的副作用。

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的符号错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM