[英]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.