본문 바로가기

자바 프로그래밍/2장. 값과 변수

2. 값의 크기(비트, 바이트, 워드)와 범위

반응형

 

값의 크기 중에서 가장 작은 단위는 비트(bit)이다.  비트의 크기는 2라고 한다. 왜냐하면 1비트로 표현할 수 있는 수는 두 가지(0, 1)이기 때문이다. 

 

마찬가지로 2비트의 크기는 4이다. 왜냐하면 2비트로 표현할 수 있는 수는 네 가지(00, 01, 10, 11)이기 때문이다. 이렇게 비트의 수가 늘어날수록 그 값의 크기는 2의 배수로 커진다.

 

이렇게 비트는 크기를 가지고 있기 때문에 프로그래밍에서 값의 크기를 표현하는 단위로 사용되기도 한다. 물론 다음처럼 더 큰 크기의 단위도 있다. 

 

 

8개의 비트를 묶은 단위로 바이트(Byte)라고 한다. 그리고 바이트 두 개를 묶은 단위로 워드(Word)가 있고 두 개의 워드를 묶은 단위로 더블워드(Double Word)도 있다.

 

1 바이트의 크기는 256이지만 최대값은 2의 8승-1이다. 1 바이트의 크기를 말할 때는 1 바이트로 표현할 수 있는 값의 수를 말하지만 1 바이트의 최댓값이란 최솟값 0으로부터 시작해서 1바이트 크기로 표현할 수 있는 최대의 값을 말한다.

 

따라서 1바이트의 최댓값은 255이다. 왜냐하면 256개의 숫자를 0부터 시작하면 마지막 값은 255(256-1)이기 때문이다.

 

만약에 1 바이트로 표현할 수 있는 값에 음수를 포함할 경우에는 제일 앞의 1비트(최상위 비트:MSB-Most Significant Bit)를 부호비트(음수는 1, 양수는 0)로 사용하기 때문에 최소값은 7비트를 이용한 범위가 된다.

 

-27 ~ 27-1

 

위의 범위에서 양수쪽보다 음수쪽의 수가 하나 더 큰 이유는 -0과 +0 두 개 중에서 +0만 남기고 -0을 없애고 음수를 표

2-1 정수의 최대값과 값의 범위

 

자바에서 사용하는 정수의 기본 크기는 32비트이다. 그리고 음수도 사용하기 때문에 자바에서 정수는 다음과 같은 비트 구조를 가진다.

그리고 값의 범위는 다음이 된다.

 

2-2 실수값의 비트구조와 값의 범위

실수는 소수점을 가지고 있어서 값의 비트구조가 정수처럼 단순하지는 않다. 

 

소수점을 표현하는 방법은 크게 “고정소수점(Fixed Point)”과 “부동소수점(Float Point)”으로 나눌 수 있다. 그 중에서 우선 고정소수점 방법부터 알아보도록 하자.

 

A) 고정소수점 표현방법

 

고정 소수점 표현방법은 단순하고 구현하기 쉬운 방법이다. 만약에 실수의 크기가 32비트라고 가정하고 그것을 고정소수점으로 표현하면 그 모양은 다음처럼 표현하는 것을 말한다.

 

 

비트의 구조를 정확히 절반으로나누어서 절반은 정수를 위해 사용하고 나머지 절반은 소수를 위해 사용하는 단순한 구조이다.

 

그런데 이 구조는 유연하지도 않고 효율적이지도 않다. 예를 들어 다음처럼 정수가 크고 소수가 0인 값을 생각해보자.

 

35000.0

 

정수부의 비트가 15비트이므로 위의 정수값을 표현할 수 없다. 왜냐하면 15비트로 나타낼 수 있는 최대값은 215-1(=32767)을 넘을 수 없기 때문이다.  소수부의 비트는 남아도는데도 그 공간은 사용할 수가 없다.

 

반대로 다음처럼 정수는 0이고 소수가 긴 값을 생각해보자.

 

0.1232344532345434234

 

이 또한 소수부에 위의 소수를 담아낼 수가 없다. 정수부의 비트는 남아도는데도 말이다. 

 

이런 이유로 고정소수점 방식은 표현하기도 단순하고 성능도 좋은 장점을 가지고 있지만 공간을 유연하게 사용하지 못하는 단점을 가지고 있다.

 

그래서 자바에서는 고정소수점 방식을 사용하지 않고 부동소수점 방식을 이용하고 있다.

 

B) 부동소수점 표현방법

 

부동 소수점 방식은 정수와 소수를 구분하지 않고 두 수를 하나의 공간으로 합쳐서 표현하는 방법이다.

 

 

지수표현 방법을 사용하면 정수와 소수가 모두 소수부에 위치하면서 자연스럽게 그 값이 합쳐진다. 이 수를 가수라고 한다.

 

실수 12.5를 이용해서 가수를 만드는 방법을 알아보자. 우선 12.5를 2진수로 변경한다.

 

1100.1

 

그리고 위의 실수값을 지수표현으로 변경한다.

 

1.1001e3

 

3은 지수가 되고 1.1001에서 맨 앞 1. 을 뺀 1001은 가수가 된다. 이 지수와 가수를 비트구조로 옮기면 다음과 같은 그림이 된다.

 

 

이렇게 비트를 표현하면 값을 가수부 23비트로 여유롭게 표현할 수 있고 지수부로 소수점을 유연하게 옮길 수가 있다.

 

이렇게 소수점을 고정시키지 않은 표현 방식을 부동 소수점(떠다니는 소수점-Float Point)이라고 한다.





2-3 실수의 최대값과 값의 범위

 

자바에서는 32비트(4바이트)와 64비트(8바이트) 크기의 실수를 사용할 수 있다. 그 중에서 32비트 부동소수점의 최대값은 가수부의 비트를 모두 1로 설정한 다음과 같다.

 

01111111011111111111111111111111

 

그리고 최소값은 위의 비트와 동일하면서 부호비트만 음수가 되면 그 값이 가장 작은 값이 된다.

 

-01111111011111111111111111111111



이런 방식으로 32비트 실수값의 범위는 다음 그림과 같다.

 

 

그리고 -3.402823466 E + 38부터 3.402823466 E + 38이 된다.  이 보다 자세한 내용은 자바의 범주를 벗어나는 내용이므로 여기까지 아는 것만으로도 충분하다. 하지만 그 내용을 더 알고 싶다면 나중에  “계산기 구조론”을 추가로 공부해보도록 하자.

 

자바에서 제공하는 값의 종류는 다음과 같다.

 

정수, 실수, 문자, 부울

 

반응형

'자바 프로그래밍 > 2장. 값과 변수' 카테고리의 다른 글

1. 값의 종류와 표현방법  (0) 2022.01.24