2019년 2월 27일 수요일

3. 2진수

앞의 구의 예에서는 10진수를 사용하여 설명하였다. 그러나 컴퓨터는 10진수가 아닌 2진수를 사용한다. 10진수는 0에서 9가지 10개의 숫자를 사용하지만, 2진수는 01만을 사용한다.
 
예를 들어, 10진수를 사용하면 한자리에 0에서 9까지 10개의 숫자를 쓸 수 있지만, 2진수를 사용하면 01 오직 두 개의 숫자만을 쓸 수 있다.



만약 두 자리를 사용하면 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'보다 두 배의 가치를 가지게 된다.


 그러므로 각 자리는 고유한 가치가 있다.


십진수의 가치 값은 위의 그림과 같다. 십진수 12031*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이 된다.
 
또는 아래와 같은 방법도 있다.
 
2216(=2^4)보다 크고 32(=2^5)보다 작다. 그러므로 2^4자리에 1을 쓴다. 10000
16을 표시했으므로 22에서 16을 빼면 6이 남는다.
64(=2^6)보다 크고 8(=2^3)보다 작다. 그러므로 2^3자리에 1을 쓴다. 10100
4를 표시했으므로 6에서 4를 빼면 2가 남는다.
22(=2^1)자리에 1을 쓰면 된다. 10110
2를 표시했으므로 2에서 2를 빼면 0이 된다. 더 이상 쓸 것이 없다.
따라서 22의 이진수 표현은 10110이 된다.
 
어떤 방법이든 관계없다. 자신이 편한 방법으로 바꾸면 된다.
 
십진수 130을 이진수로 바꿔보라.
 
 



정답은 10000010이다.
 
 
자 그렇다면 이제 본격적으로 컴퓨터 연산의 기본단위인 바이트(byte) 단위로 계산을 해보자. 1byte8비트(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억개가 넘는 주소를 만들 수 있게 된다.


댓글 없음:

댓글 쓰기

6. 네트워크 주소, 브로드캐스트 주소

아이피 주소를 이해하기 위해서는 네트워크 주소와 브로드캐스트 주소를 이해할 필요가 있다 .   먼저 네트워크 주소부터 살펴보자 .   192.168.10.2/24 인 아이피 주소가 있다고 생각해 보자 .   이 아이피...