Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как поместить неподписанный поплавок в ByteBuffer?

Автор вопроса: user3668129Ответов: 2

Я пытаюсь обработать количество беззнаковых примитивов с помощью ByteBuffer.

Я могу обработать (поместить в ByteBuffer) беззнаковый байт/короткий/целый. Например, код для обработки unsigned int:

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

но когда я хочу сделать то же самое для беззнакового поплавка:

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

Я получаю сообщение об ошибке компилятора: "Оператор & не определен для типов аргументов int, double"

Итак, как я могу получить и установить беззнаковое число с плавающей запятой с помощью ByteBuffer?

Спасибо

  • На самом деле нет никакого согласованного определения беззнакового числа с плавающей запятой. Louis Wasserman 07.12.2014
  • вы правы, после проверки с проектом cpp - нет беззнакового поплавка... :) user3668129 07.12.2014
  • Этот вопрос действительно не имеет никакого смысла. В Java вообще нет беззнаковых типов (если не считать char) - и я не знаю ни одного языка с беззнаковыми поплавками. Я пытаюсь представить, каким может быть беззнаковое число с плавающей запятой - такой идеи просто не существует. Dawood ibn Kareem 07.12.2014
  • @DavidWallace, я полагаю, что бит знака будет использоваться как часть мантиссы или экспоненты. aioobe 07.12.2014
  • Да, мы можем себе это представить. Вопрос по-прежнему не имеет смысла. Я пытаюсь обработать количество неподписанных примитивов эквивалентно тому, что я пытаюсь пасти единорогов. Мы можем представить, как могут выглядеть эти единороги, но какой в ​​этом смысл? Dawood ibn Kareem 07.12.2014

javaunsigned

Ответы

Ответ 1 · рейтинг 2 · aioobe

Представление с плавающей запятой IEEE 754 имеет 1 бит, зарезервированный для знака. Не существует альтернативного представления, в котором этот бит используется как часть мантиссы или экспоненты. Другими словами, не существует "беззнакового числа с плавающей запятой".

Если все, что вы хотите сделать, это убедиться, что вы не помещаете отрицательные числа в буфер, просто выполните

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

Ответ 2 · рейтинг -1 · Tkachuk_Evgen

Вы не можете использовать побитовое & с числами с плавающей запятой. Попробуй это:

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы