gpt4 book ai didi

c++ - "signed char"和 "unsigned char"能否始终相互转换而不丢失数据?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:19 25 4
gpt4 key购买 nike

在 C++ 中,我们可以使用 signed charunsigned char,它们的大小相同但值的范围不同。

在下面的代码中:

signed char signedChar = -10;
unsigned char unsignedChar = static_cast<unsigned char>( signedChar );
signedChar = static_cast<signed char>( unsignedChar );

无论其原始值是多少,signed char 都会保留其值吗?

最佳答案

不,没有这样的保证。从 signed charunsigned char 的转换是明确定义的,就像 C++(和 C)中的所有有符号到无符号整数转换一样。但是,该转换的结果很容易超出原始签名类型的范围(在您的示例中会发生 -10)。

反向转换的结果 - unsigned charsigned char - 在这种情况下是实现定义的,因为 C++ 中所有溢出的无符号到有符号整数转换(和 C)是。这意味着不能仅从语言规则来预测结果。

通常,您应该期望实现“定义”它以便恢复原始 signed char 值。但是语言对此没有任何保证。

关于c++ - "signed char"和 "unsigned char"能否始终相互转换而不丢失数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3279220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com