我甚至不确定我的标题是否准确,但对于我的项目,我需要使用double并将其转换为十六进制,然后将其转换为double。但为了做到这一点,我想在输出答案之前,我需要超载运营商< <。这是我到目前为止,但我得到的提示,“没有运营商”< <“匹配这些操作数”>有人可以请指出我应该如何超载在主要运算符<的正确方向吗?谢谢!使用union将double转换为double使用
#include <iostream>
#include <iomanip>
#include <cstdint>
using namespace std;
void out_char_as_hex(int c)
{
cout << hex << setw(2) << setfill('0') << c;
}
int main()
{
union { double d; uint64_t u; } tmp;
double x = -0.15625;
tmp.d = x;
cout << out_char_as_hex(tmp.d) << endl;
return 0;
}
如果有帮助,这是这个问题:“如果x是double类型的变量,它的二进制表示可以被重新解释为一个64位的整数,它可以精确地表示。为了做到这一点,可以或者将内存地址赋给double类型的变量并重新解释将其转换为64位int指针或使用联合为了使文本表示更加紧凑,我们使用16位(十六进制)。例如,双数 - 0.15625应保存为16位字符bfc4000000000000的序列(参见DemoHex.cpp中的示例, ,它们使用联合)。读取时,需要读取以十六进制格式保存的整数 ,并将其重新解释为双倍。 您需要修改th双 操作< <电子执行和落实运营>>超负荷”
你“不能”使用联合。在C++中通过联合打字是非法的。 – NathanOliver
也许我错过了一些东西,但这个问题对我没有意义。没有浮点值的十六进制表示。你能写一些预期的输入/输出吗? – AndyG
嗨Nathan感谢您的回复。我所拥有的项目要求我使用union函数,因此prof要求我们重载<<运算符以使其运行。对此有何想法? – Bert