c++ - 从 int64 和 uint64 C++ 转换时的精度损失?
问题描述
假设我在 C++ 中有以下代码片段:
int64_t a = VALUE;
uint64_t b = a;
int64_t c = b;
有哪个 VALUEa != c
吗?
解决方案
有哪个 VALUE
a != c
吗?
预 C++20
是的,理论上任何小于0
的值都会给您带来问题。如果值小于0
,b
将获得大于 的值std::numeric_limits<int64>::max()
,这意味着将有一个实现定义的从b
到的转换c
。
对于所有整数都是二进制补码的标准台式机,则a
等于c
. 对于有符号和无符号整数具有不同补码的机器,a
可能/不会相等c
。
C++20
不,所有整数类型都是二进制补码,因此该值将被保留。
推荐阅读
- angular - Highcharts - 折线图标记选定点
- python - 将字符串解析为 datetime.timedelta 参数
- r - 如何获得点和多个其他点之间的距离
- r - 根据 data.table 中的计数创建列
- nuget - 如何创建 .Net NuGet 包寻址 2.0 和 2.1
- c# - 在具有两个以太网卡的 PC 中连接到我的本地 mysql 服务器主机
- jquery - 获取具有相同类的元素的不同位置
- typescript - Typescript 中没有泛型的编译检查?
- sympy - 如何使用 SymPy 或其他库获得数值解
- git - Git:修复带有分支的仓库及其在不同分支上的远程