[英]converting from unsigned long long to unsigned int
我正在寻找一个小小的试图找到答案,但我找不到明确的答案。
我看到这个答案,他写的是旁注:
对于无符号类型,规则是不同的; 将有符号或无符号整数转换为无符号类型的结果已得到很好的定义。
那么明确定义的行为是什么?
从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)
3否则,新类型已签名且值无法在其中表示; 结果是实现定义的,或者引发实现定义的信号。
第2点描述了模运算,与在这种情况下切断MSB具有相同的效果。 (当新类型的最大值加1是数字基数的幂时,它具有相同的效果。)
如果你使用铸造没有区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.