앞의 구의 예에서는 10진수를 사용하여 설명하였다. 그러나 컴퓨터는 10진수가 아닌 2진수를 사용한다. 10진수는 0에서 9가지 10개의 숫자를 사용하지만, 2진수는 0과 1만을 사용한다.
예를 들어, 10진수를 사용하면 한자리에 0에서 9까지 10개의 숫자를 쓸 수 있지만, 2진수를 사용하면 0과 1 오직 두 개의 숫자만을 쓸 수 있다.
만약 두 자리를 사용하면 10진수는 00부터 99까지 100개의 숫자조합을 만들 수 있다. 반면 2진수는 00, 01, 10, 11 이렇게 네 가지의 숫자조합(패턴)을 만들어 낼 수 있다.
만약 3자리를 사용한다면 십진수와 이진수는 각각 몇 개의 패턴(숫자조합)을 만들 수 있을까?
정답은 십진수는 1000개 (0~999) 이진수는 8개이다.
여기서 재미있는 원리를 찾을 수 있다. 자릿수의 개수(x라고 하자)에 따라 만들 수 있는 숫자패턴의 수가 결정되는데, 10진수가 만들 수 있는 패턴의 수는 10^x (10의 x승)개가 된다는 것이다. 즉 자릿수의 개수가 3이면 모두 1000개 (10^3)의 숫자조합을 만들 수 있다. 반면 이진수의 경우에는 2^x개의 패턴을 만들 수 있다.
그렇다면 8자리를 이용하면 2진수로 만들 수 있는 패턴의 개수는 몇 개인가?
정답은 256개이다. (2^8=256)
3자리를 이용하면 2진수로 만들 수 있는 패턴의 수는 모두 8개라고 했다. 그 8개를 한번 써보라.
정답은
000
001
010
011
100
101
110
111
이다.
2진수 숫자패턴을 쓸 때는 규칙에 맞춰서 써야한다. 가장 오른쪽에 있는 자리는 매번 0에서 1로, 1에서 0으로 바뀌어야하고, 오른쪽에서 두번째 자리는 0이 두 번 1이 두 번씩 번갈아 가면서 나와야한다. 그리고 오른쪽 세번째 자리는 0이 네 번 1이 네 번씩 번갈아 가면서 나와야 한다.
그럼 4자리가 있을 때 만들 수 있는 패턴의 수는 모두 16가지이다. 그 16가지를 한번 써보라.
정답은
0000
0001
0010
0011
0100
0101
0110
0111
|
1000
1001
1010
1011
1100
1101
1110
1111
|
이다.
이렇게 사용할 수 있는 자릿수가 하나씩 늘어날 때 마다 만들 수 있는 2진수 패턴의 수는 두배씩 증가한다.
우리가 2진수 패턴(비트패턴이라고도 한다)을 숫자로 사용하고자 하면, 각 자리가 가지는 값어치는 모두 다르다. 즉 맨 오른쪽에 있는 1과 맨 왼쪽에 있는 1은 같은 1이 아니다.
십진수의 경우에는 왼쪽으로 한자리 옮기게 되면 그 가치가 10배가 높아진다. 아래 그림에서 1을 왼쪽으로 옮기면 열배인 10이 된다. 한 번 더 왼쪽으로 옮기면 다시 그 열배인 100이 된다. 이진수의 경우에는 왼쪽으로 한자리 옮기면 그 가치가 2배 높아진다. 2진수 '10'은 이진수 '01'의 두배의 가치를 가지고, 이진수 '100'은 다시 이진수 '010'보다 두 배의 가치를 가지게 된다.
그러므로 각 자리는 고유한 가치가 있다.
십진수의 가치 값은 위의 그림과 같다. 십진수 1203는 1*1000 + 2*100 + 0*10 + 3*1의 가치를 가진다.
그렇다면 2진수의 경우 각 자리가 갖는 가치 값은 어떻게 될까? 각자의 노트에 써보기 바란다.
정답은
그러므로 이진수 1111을 십진수로 바꾸면
1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 1*8 + 1*4 + 1*2 + 1*1
이 되어 15가 된다.
그렇다면 1100은 십진수로 어떻게 될까?
정답은 12이다. (1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = 1*8 + 1*4 + 0*2 + 0*1 = 12)
10진수를 2진수로 바꿀 수 있을까?
바꾸는 방법은 여러 가지가 있다. 학교에서 배우는 것처럼 10진수를 2로 나눈 후에 각 나머지 값을 거꾸로 읽으면 2진수가 된다.
위와 같은 방법으로 십진수 22를 이진수로 바꾸면 10110이 된다.
또는 아래와 같은 방법도 있다.
22는 16(=2^4)보다 크고 32(=2^5)보다 작다. 그러므로 2^4자리에 1을 쓴다. 10000
16을 표시했으므로 22에서 16을 빼면 6이 남는다.
6은 4(=2^6)보다 크고 8(=2^3)보다 작다. 그러므로 2^3자리에 1을 쓴다. 10100
4를 표시했으므로 6에서 4를 빼면 2가 남는다.
2는 2(=2^1)자리에 1을 쓰면 된다. 10110
2를 표시했으므로 2에서 2를 빼면 0이 된다. 더 이상 쓸 것이 없다.
따라서 22의 이진수 표현은 10110이 된다.
어떤 방법이든 관계없다. 자신이 편한 방법으로 바꾸면 된다.
십진수 130을 이진수로 바꿔보라.
정답은 10000010이다.
자 그렇다면 이제 본격적으로 컴퓨터 연산의 기본단위인 바이트(byte) 단위로 계산을 해보자. 1byte는 8비트(bit)이다. 여기서 bit라는 것은 이진수를 쓸 수 있는 한자리를 의미한다. 8bit이면 모두 8자리 이진수를 쓸 수 있다는 의미이다.
이렇게 8자리가 있다고 하면 우리가 만들 수 있는 이진수 패턴(비트패턴)은 모두 몇 개인가?
정답은 256개이다. 조금 전에 설명했던 것이다.
이러한 패턴을 십진수 숫자와 매치하면
00000000 = 0
00000001 = 1
00000010 = 2
00000011 = 3
...
11111100 = 252
11111101 = 253
11111110 = 254
11111111 = 255
과 같다.
이처럼 8bit 곧 1byte가 있으면 우리가 표시할 수 있는 10진수 숫자의 범위는 0에서부터 255까지 모두 256개가 된다.
아이피주소는 4byte로 이뤄져 있다. 4byte를 표시할 때는 각 byte사이에 . 을 찍어 구분한다.
1byte.1byte.1byte.1byte
그리고 각 byte를 이용해 십진수 0~255까지 표시할 수 있다.
0~255.0~255.0~255.0~255
따라서 4byte 주소가 있을 때, 각 byte별로 0~255까지 쓸 수 있게 되어 모두 256*256*256*256개의 서로 다른 숫자를 만들어 낼 수 있다.
256*256*256*256 = 2^8 * 2^8 * 2^8 * 2^8 = 2^32 = 4,294,967,296
즉 4byte 아이피 주소로 활용하면 42억개가 넘는 주소를 만들 수 있게 된다.