더북(TheBook)

029 부호 없는 두 수 비교

 

부호 있는 두 정수인 Integer.MIN_VALUE(-2,147,483,648)Integer.MAX_VALUE(2,147,483,647)를 생각해보자. 두 정수(부호 있는 값)를 비교하면 -2,147,483,6482,147,483,647보다 작다고 나온다.

// resultSigned는 -1이 되는데,
// 이는 MIN_VALUE가 MAX_VALUE보다 작다는 뜻이다
int resultSigned = Integer.compare(Integer.MIN_VALUE, Integer.MAX_VALUE);

JDK 8의 Integer.compareUnsigned() 메서드는(부호 없는 값에 Integer.compare()를 쓰는 것과 동등) 위 두 정수를 부호 없는 값으로서 비교한다. 대개 이 메서드는 부호 비트(sign bit) 표기를 무시하고, 가장 왼쪽 비트(left-most bit)를 최상위 비트(most-significant bit)로 본다. 부호 없는 값으로 간주해서 비교하는 두 수가 같으면 0을, 첫 번째 부호 없는 값이 두 번째 부호 없는 값보다 작으면 0보다 작은 값을, 첫 번째 부호 없는 값이 두 번째 부호 없는 값보다 크면 0보다 큰 값을 반환한다.

아래 비교에서는 1을 반환하는데, 이는 Integer.MIN_VALUE의 부호 없는 값이 Integer.MAX_VALUE의 부호 없는 값보다 크다는 뜻이다.

// resultSigned는 1이 되는데,
// 이는 MIN_VALUE가 MAX_VALUE보다 크다는 뜻이다
int resultUnsigned
  = Integer.compareUnsigned(Integer.MIN_VALUE, Integer.MAX_VALUE);

Info ≣ compareUnsigned() 메서드는 JDK 8부터는 IntegerLong 클래스에, JDK 9부터는 ByteShort 클래스에 사용할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.