从标准(4.7)看起来,当它们使用相同数量的位时,从int转换为unsigned int,纯粹是概念性的:
如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模2 n,其中n是用于表示无符号类型的位数).[注意:在二进制补码表示中,此转换是概念性的,并且位模式没有变化(如果没有截断). - 结束说明]
因此,在此方向上,转换会保留位掩码.我不确定标准是否保证从unsigned int到int的转换相同(同样,假设使用相同的位数).这里的标准说:
如果目标类型是有符号的,如果它可以在目标类型(和位域宽度)中表示,则该值不变; 否则,该值是实现定义的.
这究竟是什么意思"目的地类型"?例如,2 ^ 32-1不能用32位int表示.这是否意味着它无法在目标类型中表示,因此不能假设位模式保持不变?