2016-11-04 5 views
3

float와 int 모두 Java의 프리미티브 배열에 저장하려면 4 바이트가 필요하다는 것이 알려져 있습니다. 따라서 부동 소수점 값은 동일한 내부 32 비트 표현을 갖는 int 값으로 매핑 될 수 있습니다.Java에서 float와 int 값 사이에 양방향 일대일 매핑을 설정하는 방법은 무엇입니까?

float와 int 사이에서 연산 방식으로 저렴한 일대일 매핑을 설정하는 방법은 무엇입니까? 예를 들어 3.2345f를 -67567575로 매핑하고 -67567575를 3.2345f에 가까운 값으로 다시 매핑 할 수 있으며 대부분의 float 값 (NaN 또는 Infinity는 무시할 수 있음)을 다룰 수 있습니다. 매핑의 순서 나 의미는 중요하지 않습니다.

(필자가 필요로하는 이유는 구현중인 jcuda 커널 기능에 관한 문제를 해결하기 위해서이며, 다른 방법을 사용하면 문제가 더 복잡해집니다. 다른 방법을 추천하는 대신이 질문에 대한 직접적인 대답이 필요합니다. 등등.

답변

5

float-> int 변환에는 Float.floatToIntBits(floatValue)을, int-> float 변환에는 Float.intBitsToFloat(intValue)을 사용할 수 있습니다. intBitsToFloat 상태의 자바 독 같이

공용 static 플로트 intBitsToFloat (INT 비트)

주어진 비트 표현에 대응하는 부동 소수점 값을 돌려 준다.

다른 :

공용 static INT의 floatToIntBits (실수 값)

는 IEEE 754 부동 소수점 "단일 포맷"에 따라 지정된 부동 소수점 표현을 리턴 비트 레이아웃.

관련 문제