如何使用浮点类型的二进制表示
How can I take binary representation of float-pointing types?
如何使用浮点数类型的二进制表示?或者怎么取浮点数的尾数和指数?
查看frexp
函数以获取有效和指数:http://www.cplusplus.com/reference/cmath/frexp/
我不知道这是否是最好的方法,可能取决于编译器,但您可以创建一个适当大小的无符号整数和浮点类型的联合。赋值浮点数,并读取int
可以使用联合体
union converter
{
float number;
struct
{
unsigned int mantisa : 23;
unsigned int exponent : 8;
unsigned int sign : 1;
} binary;
};
使用这个结构,您可以轻松地提取尾数,指数和符号数据:
union converter convert;
convert.number = 24.6;
int mantisa = convert.binary.mantisa;
int exponent = convert.binary.exponent;
int sign = convert.binary.sign;
#include<iostream>
using namespace std;
int main(){
float test{ 9.9f };
unsigned char *print{ (unsigned char *)&test };
unsigned int mask{ 1 };
for (int i = sizeof(float) - 1; i >= 0; --i){
unsigned int temp{ print[i] };
for (int i = 7; i >= 0; --i)
cout << ((temp & (mask << i)) >> i);
}
cout << endl;
return 0;
}
double类型的只是替换代码中的两个浮点数。
请注意,这段代码只适用于小端机器,我得到的输出是01000001000111100110011001100110
低位优先:
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...
}
如果您想获得浮点类型的二进制表示,那么使用union和std::bitset似乎是最快的方法。
在C中,我们知道类型双关语,尽管联合是可以的(参见我在这里的脚注),但在 c++ 中,这是一个不清楚的,所以最好使用一个明确支持它的编译器,如gcc,它在c++中记录了这种支持。
快速实现如下(参见):
#include <bitset>
#include <iostream>
union floatToInt
{
float f ;
unsigned int u ;
} ;
int main()
{
floatToInt u1 ;
u1.f = 3.4f ;
std::bitset<32> bs1( u1.u ) ;
std::cout << bs1 << std::endl ;
}
,结果如下:
01000000010110011001100110011010
如果我们把它插入IEEE 754转换器,就会得到3.4
。
相关文章:
- 浮点数为 32 位和 64 位二进制表示形式
- 如何将uint8_t的二进制表示形式读取为数字
- 二进制表示,如何获得"相关位"?
- 了解浮点数的二进制表示形式
- 如何在 mfc c++ 中流式传输.zip文件夹的二进制表示形式
- 浮点逆二进制表示
- 以C++显示浮点类型的二进制表示形式
- 在二进制表示中将二进制 std::string 转换为 int
- 如何在计算机内存中打印长双重表示的二进制表示
- 将uint8_t转换为其二进制表示
- 与类型的二进制表示相关的技术词是什么?
- 以从 a 到 b 的数字的二进制表示形式计算 "1" 位数字的算法
- C++-如何获得十进制数的二进制表示
- 如何将一个数字的二进制表示中的所有1相加
- 涡轮 C 中的二进制表示
- 数据C++的二进制表示显示的数据不正确
- 二进制表示形式
- 打印有符号整数的二进制表示形式
- BigInt实现-将字符串转换为存储为无符号int的二进制表示
- 如何用非标准二进制表示法对数字进行算术运算