(이전 포스팅을 읽고 해당 포스팅을 읽으시면 더욱 이해가 잘될수도!?)
우리는 앞에서 2의 보수에 대해서 알아보았다. 또한, 우리는 컴퓨터상에서 쓰이는 bit,byte등의 단위들을 공부하였다.
그렇다면, 이제 우리가 이해하여야 할 것은 각 bit가 표현할 수 있는 정수의 범위를 알아보고 이것을 Java의 각 자료형은 정수의 어느 범위까지 표현할 수 있는지를 알아보도록 할 것이다.
(분명 2의 보수는 이해를 했는데..)
4비트와 음의 정수가 주어졌을때, 2의 보수를 이용하여 2진수로 표현해보자.
먼저 -1의 경우 부터 살펴보자.
-1을 2진수로 표현하기 위해서는 먼저 십진수 1에 대하여 1의 보수를 취해주어야 한다.
따라서 그 결과는 1110(2)가 될 것이다.
그 후, 가장 낮은 자리수에 1을 더해주면 끝😤
즉, 1111(2)가 된다.
나머지 숫자들에도 위와 같은 방법을 통하여 전부 이진수로 나타내준다면, 위의 표와 같이 될것이다.
위의 표를 보게 되면 무언가 특징을 찾을 수 있을 것이다.
MSB 비트를 제외한 비트들을 보면, 그 수가 점점 작아지는 형태를 보게 된다. (111,110,101,100...)
바로 한번 해보자.
먼저 부호를 뺀 십진수 9를 이진수로 나타내어 보자. 10001(2)이다.
🤔어라?🤔
벌써부터, 1bit가 초과된다. 따라서, -9는 4bit로 나타낼 수 없다는 것이다. 최소 5bit가 필요하다. (입구컷..)
일단 위에서 4비트로 표현할 수 있는 음수의 범위는 (-1)~(-8)라는 것을 알게 되었다.
추가적으로 우리는 이전 포스팅에서 최상위비트는 MSB로 '부호비트'라는것을 공부하였다.
그렇다면, 4비트 중에서 실질적으로 표현할 수 있는 비트는 3비트이다. 따라서, 4비트에서 양수는 0001(2)~0111(2) 까지 표현할 수 있으며, 이를 10진수로 표현하면 1~7까지 표현할 수 있다는 것이다. 추가적으로 0000(2)은 0이므로 0도 같이 포함한다면, 0~7까지 표현할 수 있다.
그럼 이러한 범위들을 전부 합치면, 4비트로는 (-8)~7까지의 정수를 표현할 수 있다는 것을 알 수 있다.
이것을 지수로 표현하면 아래와 같다.
4비트로 표현할 수 있는 수의 범위 : -2^3 ~ 2^3-1
만약 'n비트가 표현할 수 있는 수의 범위를 구해보아라' 라고 한다면 우리는 아래와 같이 대답할 수 있을 것이다.
-2^(n-1) ~ 2^(n-1) - 1
이전에는 음수표현을 알아볼때, 4비트에 대해서만 알아보았지만, 5비트까지는 손으로 직접 해볼만 하다. 따라서, 위의 일반화된 식에 대해서 이해가 가지 않는다면, 직접 종이를 펴두고 하나하나 손으로 써내려가보자🔥
이제까지 정수 표현에 대해 알아보았다면, 이제는 자바에서 제공하는 기본자료형 중에서 정수 자료형과 정수 표현을 매치 시켜서 알아보도록 해보자.
정수 자료형은 양수, 음수, 0을 나타내는데 사용하는 자료형이다.
위 표를 보면, 정수는 byte, short, int, long으로 총 4가지 자료형으로 나타낼 수 있고, 각 자료형은 표현하는 정수의 범위, 메모리에서 사용하는 바이트 수, 용도가 전부 다르다.
또한 각각의 자료형마다 바이트 크기가 다르다. 이것을 비트로 바꿔서 표현하면 아래와 같다.
비트크기로 나타내었으니 앞에서 구하였던, 일반식을 대입해보면 각 자료형이 나타낼 수 있는 유효범위를 구할 수 있을 것이다.
그래서, 정리해보면 아래와 같다.
이렇게 해서 이제 우리가 알고있는 자료형의 유효숫자범위가 나오게 되는것이다..!