【问题标题】:How to put unsigned float into ByteBuffer?如何将无符号浮点数放入 ByteBuffer?
【发布时间】:2014-12-07 18:41:11
【问题描述】:

我正在尝试使用 ByteBuffer 处理无符号基元数。

我可以处理(放入ByteBuffer)无符号字节/短/整数。 比如处理 unsigned int 的代码:

m_buf.putInt(nOffset, (int) (0xFFFFFFFF & number.longValue()));

但是,当我想对无符号浮点数做同样的事情时:

m_buf.putFloat(nOffset, (float) (0xFFFFFFFF & number.doubleValue()));

我收到编译器错误:“运算符 & 未定义参数类型 int, double”

那么 - 如何使用ByteBuffer 处理获取和设置无符号浮点数?

谢谢

【问题讨论】:

  • 对于无符号浮点数实际上并没有任何公认的定义。
  • 你是对的,在检查 cpp 项目后 - 没有未签名的浮点数... :)
  • 这个问题真的没有任何意义。 Java 根本没有无符号类型(除非你算上char)——而且我不知道有任何语言有无符号浮点数。我试图想象一个无符号浮点数可能是什么——这个想法根本不存在。
  • @DavidWallace,我想符号位将用作尾数或指数的一部分。
  • 是的,我们可以想象。这个问题仍然没有意义。 “我正在尝试处理未签名的原始数字”相当于“我正在尝试放牧独角兽”。我们可以想象那些独角兽的样子,但有什么意义呢?

标签: java unsigned


【解决方案1】:

IEEE 754 浮点表示为符号保留了 1 位。没有其他表示可以将此位用作尾数或指数的一部分。换句话说,没有“无符号浮点数”。

如果您只想确保不要在缓冲区中放入任何负数,那么就这样做

m_buf.putFloat(nOffset, Math.abs(number.floatValue()));

【讨论】:

    【解决方案2】:

    您不能将按位 & 与浮点数一起使用。试试这个:

    m_buf.putFloat(nOffset, Float.valueOf(0xFFFFFFFF & number));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 2011-04-23
      • 2011-11-13
      相关资源
      最近更新 更多