Я пытаюсь обработать количество беззнаковых примитивов с помощью ByteBuffer.
Я могу обработать (поместить в ByteBuffer) беззнаковый байт/короткий/целый. Например, код для обработки unsigned int:
m_buf.putInt(nOffset, (int) (0xFFFFFFFF & number.longValue()));
но когда я хочу сделать то же самое для беззнакового поплавка:
m_buf.putFloat(nOffset, (float) (0xFFFFFFFF & number.doubleValue()));
Я получаю сообщение об ошибке компилятора: "Оператор & не определен для типов аргументов int, double"
Итак, как я могу получить и установить беззнаковое число с плавающей запятой с помощью ByteBuffer?
Спасибо
Ответ 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));