![](/img/trans.png)
[英]Not getting hh:mm:ss output for int32_t datatype but for uint64_t getting correct output
[英]Order of int32_t to uint64_t casting
C++标准是否保证integer转换既加宽又去掉符号是符号扩展还是零扩展?
快速测试:
int32_t s = -1;
uint64_t u = s;
在 Xcode 下产生 0xFFFFFFFFFFFFFFFF,但这是首先定义的行为吗?
当你这样做
uint64_t u = s;
[dcl.init]/17.9适用,其中规定:
正在初始化的 object 的初始值是初始化表达式的(可能转换的)值。 如有必要,将使用标准转换序列 ([conv]) 将初始化表达式转换为目标类型的 cv 非限定版本; 不考虑用户定义的转换。
如果我们查看[conv] ,在积分转换下,我们有
否则,结果是与源 integer 模 2 N一致的目标类型的唯一值,其中 N 是目标类型的宽度。
所以你保证会发生的是 -1 成为可能表示的最大数字,-2 比它少一,-3 比 -2 少一,依此类推,基本上它“环绕”。
实际上,
unsigned_type some_name = -1;
是为该无符号 integer 类型创建具有最大值的变量的规范方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.