use*_*389 15 c++ floating-point binary ieee-754
我想在C++中使用浮点数,如2.25125,以及填充二进制值的int数组,该值用于将浮点数存储在内存中(IEEE 754).
所以我可以取一个数字,最后得到一个int num [16]数组,其二进制值为float:num [0]将是1 num [1]将是1 num [2]将是0 num [3 ]将是1等等......
将int放入数组并不困难,只需获取float的二进制值的过程就是我被困住的地方.你能不能在内存中读取float变量的二进制文件?如果没有,我怎么能用C++做这个呢?
编辑:这种方式进行比较的原因是我想学习在C++中进行逐位运算.
Mar*_*ork 22
使用union和bitset:
#include <iostream>
#include <bitset>
#include <climits>
int main()
{
union
{
float input; // assumes sizeof(float) == sizeof(int)
int output;
} data;
data.input = 2.25125;
std::bitset<sizeof(float) * CHAR_BIT> bits(data.output);
std::cout << bits << std::endl;
// or
std::cout << "BIT 4: " << bits[4] << std::endl;
std::cout << "BIT 7: " << bits[7] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它可能不是数组,但您可以使用[]运算符访问位,就像使用数组一样.
产量
$ ./bits
01000000000100000001010001111011
BIT 4: 1
BIT 7: 0
Run Code Online (Sandbox Code Playgroud)
Meh*_*ari 14
int fl = *(int*)&floatVar; //assuming sizeof(int) = sizeof(float)
int binaryRepresentation[sizeof(float) * 8];
for (int i = 0; i < sizeof(float) * 8; ++i)
binaryRepresentation[i] = ((1 << i) & fl) != 0 ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)
(1 << i)将这个值1,i位向左边.该&运算符计算按位与操作数.
该for循环的每个在浮子32位的运行一次.每次,i都将是我们想要从中提取值的位数.我们计算按位和数字,并1 << i:
假设数字是:1001011,和 i = 2
1<<i 将等于0000100
10001011
& 00000100
==========
00000000
Run Code Online (Sandbox Code Playgroud)
如果i = 3那样:
10001011
& 00001000
==========
00001000
Run Code Online (Sandbox Code Playgroud)
基本上,结果将是一个数字,其i位设置为i原始数字的第th位,所有其他位为零.结果将为零,这意味着i原始数字中的第n位为零或非零,这意味着实际数字的i第n位等于1.
其他方法,使用 stl
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
float f=4.5f;
cout<<bitset<sizeof f*8>(*(long unsigned int*)(&f))<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34169 次 |
| 最近记录: |