본문 바로가기

java

왜 Integer.MIN_VALUES에 대응하는 양수가 없는가?

 - short, int, long 타입의 2진수 값 저장소는 메모리에서 2의 보수 값을 사용한다.

 - 2의 보수 표현에서 양수에 대응하는 음수는 2진수 기반의 NOT 비트 연산을 적용한다.

 - 2의 보수 표현을 사용하는 주된 이유는 0은 하나의 값만 존재, 즉 양수나 음수의 개념이 없다.

 

 일부 음수의 2진수 표현

10진수 표현 

2진수 표현 

 -1

 1111 1111

 -2

 1111 1110

 ....

 

 -127

10000 0001 

 -128

 10000 0000

 

 - 저장할 수 있는 가장 작은 음수의 최상위 비트가 1이고 나머지는 0이다.

 - 이 값을 음수화 하려면 나머지 비트를 뒤집으면 (0111 1111) 되고 원래 값으로 돌리려면 하나(1000 0000)를 더하면 된다.

 - 이런 경우 해당하는 양수는 존재하지 않는다. 양수로 사용하고 싶으면 long이나 BigInteger를 사용해야 된다.

 - Integer.MAX_VALUE보다 크거나 Integer.MIN_VALUE 보다 작은 값을 결과로 갖는 연산을 하려며 최하위 32비트만 사용하고 에러 값 반환(오버 플로우)

 

 

@Test
public void absoluteOfMostNegativeValue() {
final int mostNegative = Integer.MIN_VALUE;
final int negated = Math.abs(mostNegative);

assertFalse("No positive", negated > 0);
}

 

Integer.MIN_VALUE의 절대값을 표현하는데 int 타입을 사용할 수 없다는것 을 보여준다.