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