본문 바로가기

Java

자바 int와 long 자료형

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의 보수 - 제타위키 (zetawiki.com)

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