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

5

我在寻找答案时发现了这个问题,但是我找不到一个清晰明确的答案。
我看到这个答案,他在旁边写道:

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

那么这个“被定义”的行为是什么呢?
当从unsigned long long转换为unsigned int时,是否存在定义好的行为?它只是截断32位的MSB(留下32位LSB)吗?
假设我的系统上 sizeof(unsigned int)4sizeof(unsigned long long)8,在没有强制转换的情况下赋值和进行强制转换赋值是否存在不同的行为?

1个回答

4
该标准规定如下:
6.3.1.3 有符号和无符号整数 1.当将具有整数类型的值转换为除_Bool之外的其他整数类型时,如果该值可以由新类型表示,则保持不变。 2.否则,如果新类型是无符号的,则通过重复加上或减去一个比新类型中可表示的最大值大一的值,直到该值在新类型范围内进行转换。49) 3.否则,新类型为有符号型且不能表示该值;结果是实现定义的或引发实现定义的信号。
第2点描述了模操作,在这种情况下,它与截断MSB具有相同的效果。(当新类型的最大值加上一等于数字基数的幂时,它具有相同的效果。)
使用强制转换没有区别。

感谢您引用标准并回答我的具体问题。 - A. Sarid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接