gpt4 book ai didi

从无符号到有符号的 C++ 隐式数据类型转换

转载 作者:太空狗 更新时间:2023-10-29 19:53:21 29 4
gpt4 key购买 nike

我知道较低的数据类型会转换为较高的数据类型(例如 int -> unsigned int -> float -> 等),但我不确定以下内容:

int var = 5u - 10; // var = -5
auto var = 5u - 10; // var = 4294967291

5u 是无符号的,但在第一种情况下,为什么 -10(有符号整数)没有转换为无符号值,而在第二种情况下它呢?在第一种情况下,有符号值没有转换为无符号值,这对我来说很奇怪

最佳答案

没有“有符号整数字面量”:5u - 10 实际上是 5u 减去 10。

(减法的)结果是无符号的,并且会溢出,结果给出“比溢出的 0 少 5 个数字”(4294967291 = 232-5)

第一条语句初始化一个int,因此无符号编译时间常量被重新解释为int。结果是正确的 (-5),因为您的硬件使用 2s 补码算法。 (-5 和 4294967291 是相同的 32 位模式)

第二条语句初始化一个变量,其类型由文字推断。它是 unsigned

关于从无符号到有符号的 C++ 隐式数据类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14817857/

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