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

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

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

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

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

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

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

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

Спасибо


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


Ответы (2)


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

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

m_buf.putFloat(nOffset, Math.abs(number.floatValue()));
person aioobe    schedule 07.12.2014

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

m_buf.putFloat(nOffset, Float.valueOf(0xFFFFFFFF & number));
person Tkachuk_Evgen    schedule 07.12.2014