我想在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++中进行逐位运算.
使用union和bitset:
#include#include #include int main() { union { float input; // assumes sizeof(float) == sizeof(int) int output; } data; data.input = 2.25125; std::bitset 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; }
它可能不是数组,但您可以使用[]运算符访问位,就像使用数组一样.
产量
$ ./bits 01000000000100000001010001111011 BIT 4: 1 BIT 7: 0
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;
(1 << i)
将这个值1
,i
位向左边.该&
运算符计算按位与操作数.
该for
循环的每个在浮子32位的运行一次.每次,i
都将是我们想要从中提取值的位数.我们计算按位和数字,并1 << i
:
假设数字是:1001011,和 i = 2
1< 将等于0000100
10001011 & 00000100 ========== 00000000
如果i = 3
那样:
10001011 & 00001000 ========== 00001000
基本上,结果将是一个数字,其i
位设置为i
原始数字的第th位,所有其他位为零.结果将为零,这意味着i
原始数字中的第n位为零或非零,这意味着实际数字的i
第n位等于1
.