首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEEE浮点加法

IEEE浮点加法
EN

Stack Overflow用户
提问于 2016-10-31 22:57:25
回答 1查看 56关注 0票数 0

而不是

代码语言:javascript
复制
float a = 32.342 , b = 193.132
float total = a + b

如何将它们转换为32位并显式地使用它们的32位进行添加?

EN

回答 1

Stack Overflow用户

发布于 2016-10-31 23:44:12

如果我理解正确的话(您希望将两个float都转换为byte数组,然后将这些数组相加),您可以实现如下所示:

代码语言:javascript
复制
  // Initial floats 
  float a = 32.342f, b = 193.132f; // do not forget "f" suffix 
  float total = a + b;

  // floats as byte[4] arrays
  byte[] aArray = BitConverter.GetBytes(a);
  byte[] bArray = BitConverter.GetBytes(b);
  // let's compare actual float addition with arrays summation 
  byte[] totalArray = BitConverter.GetBytes(total);

  // Add arrays directly: we may want to convert them into Int32, 
  // add up them up and, finally, convert back to array
  // Reverse().ToArray(): we should take Ending into account  
  int c = unchecked(BitConverter.ToInt32(aArray.Reverse().ToArray(), 0) + 
                    BitConverter.ToInt32(bArray.Reverse().ToArray(), 0));
  byte[] cArray = BitConverter.GetBytes(c).Reverse().ToArray();

可视化(让我们看看所有这些内容):

代码语言:javascript
复制
  private static String ToReport(byte[] data) {
    return String.Join(" ", data.Select(x => Convert.ToString(x, 2).PadLeft(8, '0')));
  }

  ...

  String text = String.Join(Environment.NewLine,
    $"a:     {a,7} {ToReport(aArray)}",
    $"b:     {b,7} {ToReport(bArray)}",
    $"a + b:         {ToReport(cArray)}",
    $"total: {total,7} {ToReport(totalArray)}");

  Console.Write(text);

结果:

代码语言:javascript
复制
  a:      32.342 00110101 01011110 00000001 01000010
  b:     193.132 11001011 00100001 01000001 01000011
  a + b:         00000000 01111111 01000010 10000101 // array + array
  total: 225.474 01011000 01111001 01100001 01000011 // float + float
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40344781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档