有一个uint32_t的整数1611660692,将其乘1000后,发现得到的数值为1047956000,而不是1611660692000。过程如下
uint32_t a = 1611660692;
uint64_t b = a * 1000;
这种情况下,得到b的值为1047956000。右边先将结果转换为uint32_t的,再将uint32_t转换为uint64_t的,所以造成精度丢失。
如果像下边这么写就没问题了
uint32_t a = 1611660692;
uint64_t b = static_cast<uint64_t>(a) * 1000;
得到b的值为1611660692000,是正确结果