在C ++中对未签名的转换进行签名

Vin*_*ent 6 c++ standards signed integer c++14

在C ++中,标准和平台无关性(无论如何签名)都可以很好地定义将有符号整数值转换为可以有两种不同大小(例如:short intto unsigned long long intlong long intto unsigned char)的无符号整数值的结果。例如代表整数)?

Col*_*mbo 6

是的,该值已定义并且与使用的表示形式无关。[conv.integral] / 2:

如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模2 n,其中n 是用于表示无符号类型的位数)。

显然,目标类型的大小很重要。long longunsigned char可能比产生不同的价值long longunsigned int