Как переинтерпретировать биты с плавающей запятой как int

Что такое Java-эквивалент следующего кода C++?

 float f=12.5f;
 int& i = reinterpret_cast<int&>(f);

person ivorykoder    schedule 01.01.2010    source источник
comment
Вы проверили, успешно ли работает код ?? должно быть int& i = r_c<int&>(f)   -  person UltraInstinct    schedule 01.01.2010
comment
На самом деле это не переводится ни на один язык. Он интерпретирует биты с плавающей запятой как int!!! Что это обозначает? Поскольку представление с плавающей запятой не определено стандартом, оно имеет смысл только в том случае, если вы понимаете, какое представление с плавающей запятой используется вашим компилятором/аппаратным обеспечением, и знаете, что это соответствует представлению с плавающей запятой Java.   -  person Martin York    schedule 01.01.2010
comment
В дополнение к тому, что сказал Мартин Йорк, технически выполняется определяемое реализацией сопоставление от ссылки с плавающей запятой к ссылке int. Строго говоря, нет никакой гарантии, что результирующая ссылка int будет псевдонимом того же объекта.   -  person jalf    schedule 01.01.2010
comment
См. также stackoverflow.com/questions/4805058/   -  person Raedwald    schedule 24.03.2016


Ответы (1)


person    schedule
comment
Из любопытства, в чем разница между тем, что вы опубликовали, и int i = (int)f;? - person Alberto Zaccagni; 01.01.2010
comment
@Montecristo: (int) f в Java похож на static_cast‹int›(f) в C++. - person missingfaktor; 01.01.2010
comment
Хорошо... поэтому я думаю, что мне придется поискать эти два метода С++, чтобы получить полную картину, спасибо :) - person Alberto Zaccagni; 01.01.2010
comment
@Montecristo: это операторы приведения, а не методы. - person missingfaktor; 01.01.2010
comment
Обратите внимание, что версия C++ использует ссылку int. Таким образом, изменение float приведет к изменению int (неопределенным образом). Версия Java не предоставляет такой функциональности. За каждым изменением 'f' должен следовать вызов floatToIntBits(). - person Martin York; 01.01.2010