Эти два числа представлены в разных форматах: 1.0 представлено в формате с плавающей точкой (float или double), а 0x3ff0000000000000L представлено в формате целого числа (int64).
В C++ для преобразования числа с плавающей точкой в целочисленный тип можно воспользоваться функцией reinterpret_cast. Вот пример кода:
Обратите внимание, что этот код работает только если размер типа double равен размеру типа int64_t. В большинстве платформ это верно, но не гарантировано стандартом языка.
Эти два числа представлены в разных форматах: 1.0 представлено в формате с плавающей точкой (float или double), а 0x3ff0000000000000L представлено в формате целого числа (int64).
В C++ для преобразования числа с плавающей точкой в целочисленный тип можно воспользоваться функцией reinterpret_cast. Вот пример кода:
#include <iostream>int main() {
double floatNum = 1.0;
int64_t intNum = reinterpret_cast<int64_t&>(floatNum);
std::cout << "Float number: " << floatNum << std::endl;
std::cout << "Int64 number: 0x" << std::hex << intNum << "L" << std::dec << std::endl;
return 0;
}
Обратите внимание, что этот код работает только если размер типа double равен размеру типа int64_t. В большинстве платформ это верно, но не гарантировано стандартом языка.