1) int와 long
- 자바는 정수형 자료형으로 byte, short, int, long을 제공합니다.
이 글에서는 그 중에서 자주 쓰이는 int, long을 알아보겠습니다.
- 컴퓨터의 기본 단위는 비트입니다. 이 비트는 0,1이라는 2개의 숫자로 구성됩니다.
8개의 비트가 모이면, 1바이트를 구성합니다.
자바의 int는 32비트, 즉 4바이트 자료형이고, long은 64비트, 즉, 8바이트 자료형입니다.
- 컴퓨터에서는 바이트의 크기에 따라 표현할 수 있는 값의 범위가 정해집니다.
int는 4바이트, 즉 32비트이므로 -2^31 ~ 2^31-1 의 범위의 값을,
long은 8바이트, 즉 64비트이므로 -2^63 ~ 2^63-1의 범위의 값을 표현할 수 있습니다.
- 그렇다면 여기서
1) 왜 int는 32비트 자료형인데, 0~2^32가 아닌, -2^31~2^31-1의 범위를 표현하는가?
2) 왜 long은 64비트 자료형인데, 0~2^64가 아닌, -2^63~2^63-1의 범위를 표현하는가?
라는 질문을 해볼 수 있습니다.
이는 int와 long 자료형이 양수 뿐만이 아닌 음수값까지 나타내기 때문입니다.
여기서 비트의 음수 표현에 대해 이해하려면, 음수의 표현 방식과 2의 보수법을 이해해야 합니다.
2) 음수의 표현 방식과 2의 보수법
- 자바에서는 맨 앞의 비트를 양수 혹은 음수를 구분하는 비트로 사용합니다.
이 때, 맨 앞의 비트가 0일 때 양수, 1일 때 음수입니다.
맨 앞의 비트는 다른 말로 MSB(Most Significant Bit)라고 합니다.
- 2의 보수법을 이해하기 전에, 우선 1의 보수법을 이해해보겠습니다.
비트로 표현한 어떤 수가 있을 때, 그 수를 반전시켜서 나타낸 수를 1의 보수라고 합니다.
- 예를 들어, int 자료형 값 0000 0000 0000 0000 0000 0000 0010 0000(=32)이 있다고 하면,
1의 보수값은 1111 1111 1111 1111 1111 1111 1101 1111이 됩니다.
- 그리고 1의 보수값에 1을 더한 값이 2의 보수입니다.
즉, 1111 1111 1111 1111 1111 1111 1110 0000이 int형 자료값의 2의 보수입니다.
- 이 때, 원래 값 0000 0000 0000 0000 0000 0000 0010 0000 과
2의 보수값 1111 1111 1111 1111 1111 1111 1110 0000을 더하면
1 0000 0000 0000 0000 0000 0000 0000 0000 이 되는데, 이 값은 곧 0입니다.
- 따라서 2의 보수값 1111 1111 1111 1111 1111 1111 1110 0000은
원래 값 32의 음수값인 -32입니다.
3) int와 long의 활용
- 일반적으로 아주 큰 숫자를 계산하지 않는 한 int가 많이 사용되고,
int만으로 부족할 때는 long이 사용됩니다.
또한, long을 사용할 때 주의할 점은 끝에 숫자의 끝에 L을 붙여줘야 한다는 것입니다.
그렇지 않으면 int형 값으로 인식됩니다.
참고
자바의 신 1권
코드라떼([자바 무료 강의] └ [심화] 정수와 실수 - 코드라떼 (codelatte.io))
2. 자바 변수와 자료형 (3) byte, short, int, long - 삐멜 소프트웨어 엔지니어 (cselabnotes.com)
'Java' 카테고리의 다른 글
CheckedException vs UncheckedException (0) | 2022.08.03 |
---|---|
자바 float과 double 자료형 (0) | 2022.07.31 |
Java 8 람다 표현식 (0) | 2022.07.21 |
Java HashMap 이해하기 (0) | 2022.07.01 |
Object 클래스 (0) | 2022.06.14 |