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

如何显示float或double的二进制表示?

如何解决《如何显示float或double的二进制表示?》经验,为你挑选了4个好方法。

我想显示浮点数的二进制(或十六进制)表示.我知道如何手动转换(使用此处的方法),但我有兴趣看到相同的代码示例.

虽然我对C++和Java解决方案特别感兴趣,但我想知道是否有任何语言使它变得特别容易,所以我使这种语言不可知.我很想看到其他语言的解决方案.

编辑:我已经很好地覆盖了C,C++,C#和Java.是否有任何想要添加到列表中的替代语言专家?



1> cletus..:

C/C++很简单.

union ufloat {
  float f;
  unsigned u;
};

ufloat u1;
u1.f = 0.3f;

然后你输出u1.u.您可以调整此实现.

双打也很简单.

union udouble {
  double d;
  unsigned long u;
}

因为双打是64位.

Java更容易:使用Float.floatToRawIntBits()结合Integer.toBinaryString()和Double.doubleToRawLongBits结合Long.toBinaryString().


这是未定义的行为.不允许无序访问工会.
心神!浮标和双打的位大小是标准化的,长,大小等的大小......取决于架构!您可以使用特定于实现的类型__int64和__int32(在Windows上).

2> bslima..:

在C:

int fl = *(int*)&floatVar;

&floatVar会得到地址内存然后(int*)会指向这个地址内存,最后*得到4字节浮点值的int.然后你可以打印二进制格式或十六进制格式.



3> Jason S..:

Java:谷歌搜索在Sun的论坛上找到了这个链接

具体(我自己没试过)

long binary = Double.doubleToLongBits(3.14159);
String strBinary = Long.toBinaryString(binary);



4> Marc Gravell..:

在.NET(包括C#)中,您可以BitConverter接受多种类型,允许访问原始二进制文件; 获取十六进制,ToString("x2")是最常见的选项(可能包含在实用程序方法中):

    byte[] raw = BitConverter.GetBytes(123.45);
    StringBuilder sb = new StringBuilder(raw.Length * 2);
    foreach (byte b in raw)
    {
        sb.Append(b.ToString("x2"));
    }
    Console.WriteLine(sb);

奇怪的是,base-64具有1行转换(Convert.ToBase64String),但base-16需要更多努力.除非您引用Microsoft.VisualBasic,否则在这种情况下:

long tmp = BitConverter.DoubleToInt64Bits(123.45);
string hex = Microsoft.VisualBasic.Conversion.Hex(tmp);

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有