无论实际表示如何,这都是有保证的:
[conv.integral](我强调)
整数类型的 prvalue 可以转换为另一种整数类型的 prvalue。未作用域的枚举类型的 prvalue 可以转换为整数类型的 prvalue。
如果目标类型是无符号的,则结果值是源整数对 2n 取模后最小的无符号整数(其中
n
是用于表示无符号类型的位数)。[注:在二补码表示中,该转换是概念性的,并且没有比特模式的变化(如果没有截断)。—end note]
评论者是正确的;从任何其他整数类型转换为无符号整数类型始终是明确定义的。如果无符号整数类型的范围是0到2^N-1,则转换的结果将是原始值对2^N取模后的余数。即使(如具有补码或符号大小表示的系统)该取模2^N需要额外的指令,这也是适用的。