我甚至不確定我的標題是否準確,但對於我的項目,我需要使用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