2021. 6. 16. 17:39ㆍ간단한 컴퓨터 이론
1. Bit란?
컴퓨터가 이해할 수 있는 가장 작은 단위는 0과 1이다. 이때 컴퓨터가 처리할 수 있는 가장 작은 단위를 의미하는 것이 비트이다. 즉, 비트는 0 또는 1이라는 정보를 담을 수 있고 이진수로 표현할 수 있다.
2. Byte란?
bit가 모이면 조금 더 큰 범위를 표현할 수 있다.
1bit = 0또는 1
2bits = (0또는 1) x (0또는 1) = 2의 제곱
3bits= (0또는 1) x (0또는 1) x (0또는 1) = 2 x 2 x 2 = 2의 세제곱
...
8bits = 2의 여덟제곱 = 256
이때 8bits는 1byte로 표현한다. 프로그래밍이나 컴퓨터에서 가장 기본적인 단위를 byte라고 한다.
3. 십진수를 이진수로 변환하기
우리가 수를 표현할 때 일상적으로 사용하는 방법은 십진수이다. 십진수로 표현된 숫자를 이진수로 바꾸려면 십진수로 표현된 수를 2로 나누어 몫과 나머지를 통해 계산하면 된다.
예를 들어 십진수로 표현된 34를 이진수로 표현하고자 한다면, 다음과 같이 계산할 수 있다.
역으로 이진수로 표현된 수는 2의 (자릿수-1)의 제곱을 통해 구할 수 있다.
4. 문자를 이진수로 변환하기
파이썬에서의 데이터 타입은 일반적으로 정수형, 실수형, 문자형, bool형이 있다. bool형은 True, False이기때문에 0이면 False, 1이면 True로 표현할 수 있다. 그렇다면 문자형은 어떤 식으로 처리할까?
4-1. 아스키 코드와 유니코드
파이썬에서 ord('a')를 쳐보면 숫자가 출력된다. 이는 아스키 코드 테이블에서 각 문자에 대해 임의로 명시해놓은 숫자가 있는데 이를 출력한 것이다.
ord('a') # 97
이처럼 아스키 코드는 문자열을 숫자로 변환해 이진법으로 나타낼 수 있도록 각 문자를 임의의 숫자로 대응시켜놓은 것이다. 모든 아스키 코드는 7bit로 나타낼 수 있다.
하지만 이 세상에는 무수히 많은 문자들이 있다. 이 모든 문자를 1byte를 기준으로 할당하는 것은 불가능하다. 따라서 이를 표현하기 위해 '유니코드'를 사용한다.
5. Byte 이상의 단위
- GB(기가바이트)는 1024MB로 알려져있지만 막상 32GB짜리 USB를 사서 컴퓨터에 꽂아 메모리를 확인해보면 32GB가 안되는 것을 알 수 있다. 이는 일상적으로 사용하는 Byte에 대한 단위와 컴퓨터나 운영체제에서 사용하는 Byte의 단위가 다르기 때문이다. 과거에는 사용하는 용량의 단위가 작기 때문에 이 둘을 혼용하여 사용하기도 했다.
- 과거에 비해 사용하는 용량의 단위가 점차 커지면서 위의 두 Byte 단위 간의 격차가 더욱 커지게 된다. 따라서 이를 혼동하지 않기 위해 IEC(international electrotechnical commission)에서 올바른 표기법을 제정한다.
5-1. 컴퓨터에서 사용하는 단위 (IEC)
- B : Byte
- KB(kibibyte) : 1024 Byte (2의 10제곱 Bytes)
- MB(mebibyte) : 1024 KByte
- GB(gibibyte) : 1024 MByte
- TB(tebibyte) : 1024 GByte
5-2. 일상적으로 사용하는 단위 (SI)
- B : Byte
- KB(kilobyte) : 1000 Byte (1000 byte)
- MB(megabyte) : 1000 KByte
- GB(gigabyte) : 1000 MByte
- TB(terabyte) : 1000 GByte
6. 텍스트 인코딩
과거에는 각 나라마다 다양한 인코딩 방법이 존재했지만 서로 다른 인코딩 규격때문에 여러 문제점이 발생했다. 이를 해결하기 위해 UTF-8(Unicode Transformation For mat)이라는 인코딩이 등장했다.
6-1. UTF-8
- 가변 길이 유니코드 인코딩 방식이다.
- 정해진 길이가 없고 필요에 의해 길어질 수 있다.
* 모든 아스키 코드는 7bits로 표현할 수 있기 때문에 UTF-8에서는 1byte로 표현할 수 있다.
* 모든 유니 코드는 UTF-8에서 최소 2bytes에서 4bytes로 표현할 수 있다.
- 1byte로 표현할 수 있다면 그대로 데이터를 표현하고 2bytes를 표현하고자 한다면 첫번째 덩어리에서 '10'을 앞에 붙여주고 두번째 덩어리에서 '110'을 앞에 붙여주므로써 문자를 나타내는데 몇 바이트가 필요한지 나타낸다.
- 이후 더 많은 bytes가 필요하다면 마지막 덩어리의 앞에만 필요한 bytes의 개수만큼 1을 붙여주고 0을 붙여준다. 그리고 그 이전 덩어리들에겐 10을 앞에 붙여주면 된다.
예시)
1byte로 표현할 수 있는 경우 : 0111101
2bytes로 표현해야하는 경우 : 10111101 11011111
3bytes로 표현해야하는 경우 : 10111101 10111101 11101111
4bytes로 표현해야하는 경우 : 10111101 10111101 10111101 11110111
- UTF-16은 1byte가 필요하더라도 2bytes를 사용하기때문에 아직까지는 일반적으로 UTF-8을 많이 사용한다.