在 C++ 中,我们可以使用 signed char
和 unsigned char
,它们的大小相同但值的范围不同。
在下面的代码中:
signed char signedChar = -10;
unsigned char unsignedChar = static_cast<unsigned char>( signedChar );
signedChar = static_cast<signed char>( unsignedChar );
无论其原始值是多少,signed char
都会保留其值吗?
最佳答案
不,没有这样的保证。从 signed char
到 unsigned char
的转换是明确定义的,就像 C++(和 C)中的所有有符号到无符号整数转换一样。但是,该转换的结果很容易超出原始签名类型的范围(在您的示例中会发生 -10
)。
反向转换的结果 - unsigned char
到 signed char
- 在这种情况下是实现定义的,因为 C++ 中所有溢出的无符号到有符号整数转换(和 C)是。这意味着不能仅从语言规则来预测结果。
通常,您应该期望实现“定义”它以便恢复原始 signed char
值。但是语言对此没有任何保证。
关于c++ - "signed char"和 "unsigned char"能否始终相互转换而不丢失数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3279220/