首页 > 解决方案 > 从 int64 和 uint64 C++ 转换时的精度损失?

问题描述

假设我在 C++ 中有以下代码片段:

int64_t a = VALUE;

uint64_t b = a;

int64_t c = b;

有哪个 VALUEa != c吗?

标签: c++

解决方案


有哪个 VALUEa != c吗?

预 C++20

是的,理论上任何小于0的值都会给您带来问题。如果值小于0b将获得大于 的值std::numeric_limits<int64>::max(),这意味着将有一个实现定义的从b到的转换c

对于所有整数都是二进制补码的标准台式机,则a等于c. 对于有符号和无符号整数具有不同补码的机器,a可能/不会相等c

C++20

不,所有整数类型都是二进制补码,因此该值将被保留。


推荐阅读