从 unsigned long long 转换为 unsigned int

A. *_*rid 6 c type-conversion

我四处搜寻,试图找到这个问题的答案,但找不到明确的答案。
我看到这个答案,他在旁注中写道:

对于无符号类型,规则有所不同;将有符号或无符号整数转换为无符号类型的结果是明确定义的。

那么什么是明确定义的行为呢?
当从 转换unsigned long long为 时unsigned int,是否有定义的行为?是不是只截掉32个MSB?(留给我 32 LSB)。
让我们假设它sizeof(unsigned int)在我的系统4中。 在不进行强制类型转换的情况下进行分配和使用强制类型转换进行分配时是否有不同的行为?sizeof(unsigned long long)8

ala*_*ain 5

标准说:

6.3.1.3 有符号和无符号整数
1 当整数类型的值转换为除 之外的其他整数类型时_Bool,如果该值可以用新类型表示,则该值不变。
2 否则,如果新类型是无符号的,则通过在新类型可以表示的最大值上重复加或减 1 来转换该值,直到该值在新类型的范围内。49)
3 否则,新类型是有符号的,并且该值不能在其中表示;结果要么是实现定义的,要么引发实现定义的信号。

第 2 点描述了模运算,在这种情况下与切断 MSB 具有相同的效果。(当新类型的最大值加一是数基的幂时,具有相同的效果。)

如果您使用铸造,则没有区别。