从无符号长整型转换为无符号整型
问题描述:
我周围寻找一点点试图找到这个答案,但我找不到明确的答案。
只见this答案在他写的便笺:从无符号长整型转换为无符号整型
的规则是无符号类型不同;将 带符号或无符号整数转换为无符号类型的结果已定义良好。
那么什么是明确定义的行为?
将unsigned long long
转换为unsigned int
时是否存在定义的行为?它只是切断了32个MSB? (留下32个LSB)。
假设sizeof(unsigned int)
是4
和sizeof(unsigned long long)
是我的系统中的8
。
分配时是否有不同的行为而不投射,以及是否使用投射进行分配?
答
标准表示:
6.3.1.3符号和无符号整数
1当与整数类型的值被转换为比其它_Bool
另一个整数类型,如果该值 可以表示新的类型,它是不变的。
2否则,如果 新类型是无符号的,则该值是通过重复地添加 或减去小于能够在新的类型来表示 直到该值是在新的类型的范围的最大值一个更转换。 49)
否则,新的类型被签名并且其值不能被表示为 ;结果是实现定义的或实现定义的信号被引发。
点2描述了一个模运算,它与在这种情况下切断MSB具有相同的效果。 (当新类型的最大值加上1时,效果与数字基础的功率相同。)
如果使用强制转换,则没有区别。
感谢引用标准和回答我的具体情况。 –