在C ++中将double转换为intptr_t

问题描述 投票:1回答:1

假设以下内容:

#include <iostream>

int main()
{
   double a = 5.6;
   intptr_t b = (intptr_t) a;
   double c = (double) b;
   return 0;
}

c将是5。我的问题是,由于intptr_t在64位计算机上也为64位(与double相同),为什么在转换过程中不保存精度位?

c++ casting
1个回答
0
投票

尽管intptr_t表示一个指向int的指针,但其下标类型仍然是整数。因此

intptr_t b = (intptr_t)a

仍在截断double,类似于您刚刚写的内容:

int b = (int)a;

您想做的是获取a的地址:

intptr_t b = (intptr_t)&a

然后将其转换回

double c = *(double*)b;
© www.soinside.com 2019 - 2024. All rights reserved.