【发布时间】:2020-02-13 09:06:44
【问题描述】:
我已经做了一些快速测试,在 C 中将 signed int 转换为 unsigned int 不会更改位值(在在线调试器上)。
我想知道的是它是由 C 标准保证还是只是常见(但不是 100% 确定)行为?
【问题讨论】:
-
它改变了context,即值的含义。所有计算机数据都由一组有限的数字组成,这些数字在上下文中具有意义。但是,当将
int转换为float时,表示会发生变化,这会有所不同。 -
只有赋值才会改变值。从有符号(2s-补码)转换为无符号是不安全的转换,我认为是特定于实现的。
-
@LegendofPedro 使用两个已知为非负数的
int值是安全的,并且您希望它们的总和没有int溢出的危险。 -
@WeatherVane(和 LegendofPedro):演员阵容定义完美,没有溢出的危险,无论签署 int 的符号如何。