십진수와 이진수
이진수는 숫자를 나타내는데 사용할 수 있다.
또, 참과 거짓 대신에 0과 1을 사용하여 두가지 상태를 나타낼 수 있다.
만약 큰 수를 나타내고 싶다면 단순히 이진 숫자들을 더하기만 하면 된다.(십진법과 동일한 방식으로)
예를 들어, 263은 2개의 100과 6개의 10, 3개의 1로 이루어져 있다. 각 자리수는 10씩 곱해진다. 0과 9까지 10개의 수를 다 사용한 후 다음 자리로 이동한다. 이러한 이유로 십진수로 불린다.
이진수는 똑같은 방식을 두개의 수로 작동하며 각 자리수는 2씩 곱해진다.
101(2)을 예로 들면, 1개의 4, 0개의 2, 1개의 1로 이루어져 있다.
모두 더하면 십진수의 5가 된다.
더 큰 수를 나타내려면 더 많은 숫자를 필요로 한다.
이진수의 덧셈
먼저 십진수에서의 덧셈을 살펴보면, 183+19일 때, 일의 자리수 끼리 더하면 12이다. 그럼 1의자리에 2를 넣고 십의자리수에 1을 더한다. 그 후 10의자리수 끼리 더하면 8+1+1=10이다. 그럼 10의자리수에 0을넣고 100의자리수에 1을 더한다. 백의자리수의 덧셈은 2이다. 따라서 답은 202가 된다.
이진수에서도 같은 로직으로 덧셈을 한다. 10110111(2) + 00010011(2) 에서 먼저 1의자리에서 시작하며 합이 십진수에서의 2가 되면 다음 자리수에 1을 더해 올린다. 과정은 다음과 같다.
물론 11001010을 십진수로 표현하면 202가 된다.
비트
이진수에서 1과 0은 각각 비트(Bit)라고 불린다.
8비트의 수를 사용하면 가장 작은 수는 0, 가장 큰 수는 255가 된다.(11111111(2))
이는 256가지의 다른 값, 또는 2의 8승수(2^8) 이다. 8비트 컴퓨터, 8비트 그래픽 등은 8비트 덩어리들로 작업을 했던 컴퓨터들이다.
하지만 256가지의 다른 값들은 작업하기에 그리 많지 않은 숫자였다.
컴퓨터에서 공통적으로 쓰이는 크기의 8비트는 바이트(Bite)라는 특별한 단어로 불렸다. (1바이트 = 8비트)
1킬로바이트(KB)는 1000바이트이며(=8000비트) 메가는 백만 바이트(MB), 기가는 10억 바이트이다(GB). 오늘날 우리는 1테라 바이트(TB)의 하드디스크를 갖기도 한다. 이것은 8조개의 0과 1을 의미한다.
하지만, 이진수에서 킬로바이트는 2의 10승(십진수에서의 1024)바이트 이다. 1000도 킬로바이트를 언급할 때 맞긴 하지만 그것만이 옳은 정의는 아니다.
32비트나 64비트로 작동하는 것들은 32나 64비트 덩어리들로 작동한다. 32비트로 나타낼 수 있는 가장 큰 숫자는 4,294,967,295이다. 이진수에서는 32개의 1로 나타난다.
숫자를 나타낼 때, 양수뿐만아니라 음수를 나타낼 필요가 있다. 대부분의 컴퓨터는 부호의 첫번째 비트에서 1을 음의 값, 0을 양의 값을 나타내는 신호로 사용합니다. 그리고 나머지 31비트는 그 숫자 자체를 나타낸다. 이것은 대략 ±20억 까지 범위의 수를 쓸 수 있다. 그러나 많은 작업을 하기위해선 이것 또한 충분치 않다.(지구상 인구만 해도 70억) 그러므로 64비트는 유용하다. (64비트로 나타낼 수 있는 가장 큰 수는 대략 920경) 한동안은 64비트가 가장 유용한 상태일 것이다.
컴퓨터의 소수 표현
컴퓨터가 메모리가 수 조 바이트로 커지면서, 64비트 메모리 주소 또한 필요했다. 음수와 양수뿐만 아니라 컴퓨터는 정수가 아닌 다른 수도 다룰 수 있어야 한다.(ex 원주율) 그래서 부동소수점을 나타내기 위한 여러 방법들이 개발되었다.
그 중 가장 일반적인 것은 IEEE754표준이다. 이 표준은 소수를 과학적으로 표기한다. 예를들어 625.9는 0.6259*10^3 으로 적는다. 여기서 6259는 유효숫자라고 부른다. 3은 지수이다.
32비트에서 첫번째 비트는 수의 음,양을 나타낸다. 다음 8비트는 지수를, 나머지 비트는 유효숫자를 나타내는데 사용한다.
컴퓨터의 문자 표현
컴퓨터는 문자를 나타낼 때 숫자를 사용한다. 가장 직접적인 접근방식은 알파벳에 번호를 메기는 방식이다(ex a=1, b=2, c=3)
1963년에 발명된 아스키는 7비트의 코드였고, 128개의 다른 값을 저장할 수 있었다. 이 확장된 범위를 사용하면서 대문자와 소문자, 0-9까지의 숫자, @기호나 구둣점과 같은 상징적인것들도 인코딩 할 수 있게 되었다.
예를 들어 소문자 'a는 97, 대문자 'A'는 65, 콜론(:)은 58, 닫힌괄호 [ ) ] 는 41이다.
아스키는 특별한 명령코드의 집합이 있었고 그 중 줄바꿈 문자를 사용해 다음행으로 줄을 바꿀 위치를 컴퓨터에게 알려줄 수 있도록 했다.
ASCII는 초기의 표준이었기 때문에 널리 사용되었고 다른 회사에서 만든 컴퓨터와 데이터를 교환하는 데 중요하게 사용되었다. 하지만 이것은 큰 한계가 있었다. 바로 영어를 위해서만 설계되었다는 점
다행히도 1바이트 안에 7비트가 아닌 8비트가 있었고 128부터 255까지 이전에는 국제적인 문자로 사용되지 않았던 코드가 곧 대중화 되었다. 국제적인 문자 코드들은 대부분의 국가에서 꽤나 잘 작동했다. 문제는 라트비아어로 쓰인 메일을 터키 컴퓨터로 열면 완전히 이해가 불가능했다.
And.......
그래서 유니코드가 탄생했다. 1992년에 제정된 이 프로젝트는 마침내 각각의 국제적인 코드를 없애고 하나의 보편적인 인코딩 구조로 대체했다. 유니코드의 가장 일반적인 버전은 16비트 공간을 사용해서 백만개가 넘는 코드를 넣을 수 있었다. 수학적인 기호들을 위한 공간과 이모티콘과 같은 기호들을 포함할 수도 있었다. 그리고 같은 방식으로 아스키는 문자를 이진수로 인코딩하는 체계를 정의했다.
가장 중요한건 이 표면적인 것들이 길고 긴 연속의 비트열로 이어지는 것이다.
문자 메세지, 유튜브 비디오, 인터넷의 모든 웹페이지, 심지어 컴퓨터 운영체제까지도 0과 1의 연속일 뿐이다.
'CS' 카테고리의 다른 글
#3 부울 연산과 논리 게이트 (0) | 2022.02.23 |
---|---|
#2 전자 컴퓨팅 (0) | 2022.02.22 |
#1 초기 컴퓨팅 (0) | 2022.02.16 |
댓글