将double值转换为二进制值

如何将double值转换为二进制值。

我有一些像这样的价值125252525235558554452221545332224587265我想将其转换为二进制格式。所以我保持双倍然后尝试转换为二进制(1和0)..我正在使用C#.net

好吧,你没有指定一个平台或你感兴趣的二进制值,但在.NET中有BitConverter.DoubleToInt64Bits ,它可以让你很容易地得到IEEE 754位的值。

在Java中, Double.doubleToLongBits执行相同的操作。

请注意,如果您有一个值,例如“125252525235558554452221545332224587265”,那么您获得的信息比双精度数据库可以准确存储的信息更多。

在C中,你可以这样做,这是union结构的经典用法:

 int i; union { double x; unsigned char byte[sizeof (double)]; } converter; converter.x = 5.5555555555556e18; for(i = 0; i < sizeof converter.byte; i++) printf("%02x", converter.byte[i]); 

如果你把它粘在一个main()并运行它,它可能会打印这样的东西:

 ~/src> gcc -o floatbits floatbits.c ~/src> ./floatbits ba b5 f6 15 53 46 d3 43 

请注意,这当然是依赖于平台的字节顺序 。 以上是来自在Sempron CPU上运行的Linux系统,即它的小端。

如果你的意思是你想自己做,那么这不是一个编程问题。

如果要使计算机执行此操作,最简单的方法是使用浮点输入例程,然后以hexforms显示结果。 在C ++中:

 double f = atof ("5.5555555555556E18"); unsigned char *b = (unsigned char *) &f; for (int j = 0; j < 8; ++j) printf (" %02x", b [j]); 

双值已经是二进制值。 这只是你希望它具有的表现forms的问题。 在编程语言中,当您将其称为double时,您使用的语言将以一种方式解释它。 如果你碰巧把同一块内存调用为int,那么它的数字就不一样了。

所以这取决于你真正想要的……如果你需要将它写入磁盘或网络,那么你需要考虑BigEndian / LittleEndian。

对于这些巨大的数字(无法使用双精度来准确呈现),您需要使用一些专门的类来保存所需的信息。

C#提供了Decimal类:

十进制值类型表示十进制数,范围从正数79,228,162,514,264,337,593,543,950,335到负数79,228,162,514,264,337,593,543,950,335。 Decimal值类型适用于需要大量有效积分和小数位且没有舍入误差的财务计算。 Decimal类型不会消除舍入的需要。 相反,它最大限度地减少了因舍入而导致的错误。 例如,以下代码生成的结果为0.9999999999999999999999999999而不是1。

如果你需要比这更大的精度,我需要你自己上课。 这里有一个用于整理: http : //sourceforge.net/projects/cpp-bigint/虽然它似乎适用于c ++。