C++ 如何获取浮点指针类型的二进制表示?

C++ 如何获取浮点指针类型的二进制表示?,c++,floating-point,C++,Floating Point,如何获取浮点指针类型的二进制表示?或者如何获取浮点数字的尾数和指数?我不知道这是否是最好的方法,可能取决于编译器,但您可以创建大小适当的无符号整数和浮点类型的并集。分配浮点,然后读取整数。我不知道这是否是最好的方法,可能取决于编译器,但您可以创建大小适当的无符号整数和浮点类型的并集。分配浮点,并读取整数。查看frexp函数以获取有效位和指数:查看frexp函数以获取有效位和指数:\35; 使用名称空间std; int main(){ 浮球试验{9.9f}; 无符号字符*打印{(无符号字符*)&测

如何获取浮点指针类型的二进制表示?或者如何获取浮点数字的尾数和指数?

我不知道这是否是最好的方法,可能取决于编译器,但您可以创建大小适当的无符号整数和浮点类型的并集。分配浮点,然后读取整数。

我不知道这是否是最好的方法,可能取决于编译器,但您可以创建大小适当的无符号整数和浮点类型的并集。分配浮点,并读取整数。

查看
frexp
函数以获取有效位和指数:

查看
frexp
函数以获取有效位和指数:

\35;
使用名称空间std;
int main(){
浮球试验{9.9f};
无符号字符*打印{(无符号字符*)&测试};
无符号整数掩码{1};
对于(int i=sizeof(float)-1;i>=0;--i){
无符号int temp{print[i]};
对于(int i=7;i>=0;--i)
cout i);
}
不能包含
使用名称空间std;
int main(){
浮球试验{9.9f};
无符号字符*打印{(无符号字符*)&测试};
无符号整数掩码{1};
对于(int i=sizeof(float)-1;i>=0;--i){
无符号int temp{print[i]};
对于(int i=7;i>=0;--i)
cout i);
}
你可以使用联合体

union converter
{
  float number;
  struct
  {
    unsigned int mantisa  : 23;
    unsigned int exponent : 8;
    unsigned int sign     : 1;
  } binary;
};
使用此结构,您可以轻松提取mantisa、指数和符号数据:

union converter convert;

convert.number = 24.6;
int mantisa = convert.binary.mantisa;
int exponent = convert.binary.exponent;
int sign = convert.binary.sign;
你可以使用工会

union converter
{
  float number;
  struct
  {
    unsigned int mantisa  : 23;
    unsigned int exponent : 8;
    unsigned int sign     : 1;
  } binary;
};
使用此结构,您可以轻松提取mantisa、指数和符号数据:

union converter convert;

convert.number = 24.6;
int mantisa = convert.binary.mantisa;
int exponent = convert.binary.exponent;
int sign = convert.binary.sign;

Little Endian:

void func(float f)
{
    char  arr[sizeof(f)];
    char* ptr = (char*)&f;
    for (int i=0; i<sizeof(f); i++)
        arr[i] = ptr[i];
    // Now use 'arr' as you will...
}
void func(float f)
{
    char  arr[sizeof(f)];
    char* ptr = (char*)&f;
    for (int i=0; i<sizeof(f); i++)
        arr[i] = ptr[sizeof(f)-1-i];
    // Now use 'arr' as you will...
}
void func(浮点f)
{
char arr[sizeof(f)];
char*ptr=(char*)&f;

对于(int i=0;i小端点:

void func(float f)
{
    char  arr[sizeof(f)];
    char* ptr = (char*)&f;
    for (int i=0; i<sizeof(f); i++)
        arr[i] = ptr[i];
    // Now use 'arr' as you will...
}
void func(float f)
{
    char  arr[sizeof(f)];
    char* ptr = (char*)&f;
    for (int i=0; i<sizeof(f); i++)
        arr[i] = ptr[sizeof(f)-1-i];
    // Now use 'arr' as you will...
}
void func(浮点f)
{
char arr[sizeof(f)];
char*ptr=(char*)&f;

对于(int i=0;i如果您想要获得浮点类型的二进制表示,那么使用并集似乎是最快的方法

在C中,我们知道类型双关,尽管一个并集是O(),但是在C++中它是不明确的,所以最好是使用一个显式支持它的编译器,例如.< /p>。 快速实现如下():

#包括
#包括
联合浮球
{
浮动f;
无符号整数u;
} ;
int main()
{
漂浮液u1;
u1.f=3.4f;
std::位集bs1(u1.u);

std::cout如果您想要获得浮点类型的二进制表示,那么使用并集似乎是最快的方法

在C中,我们知道类型双关,尽管一个并集是O(),但是在C++中它是不明确的,所以最好是使用一个显式支持它的编译器,例如.< /p>。 快速实现如下():

#包括
#包括
联合浮球
{
浮动f;
无符号整数u;
} ;
int main()
{
漂浮液u1;
u1.f=3.4f;
std::位集bs1(u1.u);

std::你尝试了什么,什么不起作用?请向我们展示你做了一些研究。如果你不需要以编程方式来做,那么其中一个工具我可能会有所帮助。你尝试了什么,什么不起作用?请向我们展示你做了一些研究。如果你不需要以编程方式来做,那么其中一个工具我可能会有所帮助。我认为这会不适用于诸如Power PC等的Big-Endian体系结构。我认为这在诸如Power PC等Big-Endian体系结构上不起作用。这是我想要回答的问题,但互联网连接已经中断。令人高兴的是,新设备(卫星互联网抛物线)已经到达邮局。仍然,非常令人沮丧。@Cheersandhth.-Alf-我知道你的痛苦:)+1这是我想要回答的,但是互联网连接中断了。令人高兴的是,新设备(卫星互联网抛物线)已经到达邮局。仍然,非常令人沮丧。@Cheersandhth.-Alf-我知道你的痛苦:)