2014-11-04 1 views
0

비트 연산자를 사용하여 float 함수 abs를 작성해야합니다.이 함수는 float 값을 반환합니다.abs 함수를 사용하여 float 값을

< 또는 >을 사용할 수 없습니다.

나는이

(float)((int)f^((int)f>>31)) - ((int)f>>31) 

시도하지만 -2.5 값을 내가 2.0을 얻을, 그것은 올바른 아니에요.

도와 주시겠습니까?

답변

3

당신은 할 수있는이

float abs = Float.intBitsToFloat(Float.floatToIntBits(x) & 0x7FFFFFFF); 
2

float의 최상위 비트는 부호 비트입니다. 그래서 ... 비트 단위 & 연산자를 사용하여 해당 비트를 지우고 절대 값을 얻을 수 있어야합니다.

사용이 비트 단위 당신의 마스크로하고 값 :

0x7fffffff 
+0

네,하지만 어떻게? Java에서 비트 표현을 얻을 수 없습니다. –

+0

@ chiastic-security : 오, 그렇지만 할 수 있습니다. 머리 속에 보관해야하지만 모든 숫자 값은 비트 단위로 표현됩니다. – Makoto

+0

@ chiastic-security : http://docs.oracle.com/javase/8/docs/api/java/lang/Float.html#floatToRawIntBits-float- 물론 http://docs.oracle.com/javase /8/docs/api/java/lang/Float.html#intBitsToFloat-int- –