从无符号长整型转换为无符号整型

问题描述:

我周围寻找一点点试图找到这个答案,但我找不到明确的答案。
只见this答案在他写的便笺:从无符号长整型转换为无符号整型

的规则是无符号类型不同;将 带符号或无符号整数转换为无符号类型的结果已定义良好。

那么什么是明确定义的行为?
unsigned long long转换为unsigned int时是否存在定义的行为?它只是切断了32个MSB? (留下32个LSB)。
假设sizeof(unsigned int)4sizeof(unsigned long long)是我的系统中的8
分配时是否有不同的行为而不投射,以及是否使用投射进行分配?

标准表示:

6.3.1.3符号和无符号整数
1当与整数类型的值被转换为比其它_Bool另一个整数类型,如果该值 可以表示新的类型,它是不变的。
2否则,如果 新类型是无符号的,则该值是通过重复地添加 或减去小于能够在新的类型来表示 直到该值是在新的类型的范围的最大值一个更转换。 49)
否则,新的类型被签名并且其值不能被表示为 ;结果是实现定义的或实现定义的信号被引发。

点2描述了一个模运算,它与在这种情况下切断MSB具有相同的效果。 (当新类型的最大值加上1时,效果与数字基础的功率相同。)

如果使用强制转换,则没有区别。

+0

感谢引用标准和回答我的具体情况。 –