当前位置:  开发笔记 > 编程语言 > 正文

浮点到二进制值(C++)

如何解决《浮点到二进制值(C++)》经验,为你挑选了2个好方法。

我想在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++中进行逐位运算.



1> Martin York..:

使用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


@deft_code:C++是**NOT**spec'ed使用ieee754(它可以).Long是**NOT**spec'ed 32 bit(必须至少为32).这将永远不可移植,因为分配给联合中的一个字段并且从另一个字段中读取是未指定的行为.如果我对上述任何一个都不正确,请告诉我C++标准中定义它的条款,因为简单的搜索显示两个语句都是错误的.

2> Mehrdad Afsh..:
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.


操作数.
@Konrad,它更短:)我回答的唯一目的是for循环中的一行.我不想用不必要的最佳实践来弥补答案.
推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有