- 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 타입을 사용할 수 없다는것 을 보여준다.
'java' 카테고리의 다른 글
final 키워드는 객체 참조에 어떤 영향을 미치는가? (0) | 2017.11.15 |
---|---|
자바에서 객체란 무엇인가? (0) | 2017.11.15 |
몇 가지 자바 원시 타입의 이름을 지정하고 이 타입이 JVM에서 어떻게 처리되는지 설명 (0) | 2017.11.15 |
빌더 패턴은 얼마나 유용한가? (0) | 2017.11.15 |
Map (0) | 2017.11.15 |