bit
이번에는 컴퓨터가 사용하는 비트, 저장단위, 16진수에 대해 정리해 보고자 한다.
비트
비트는 무엇일까? 비트는 컴퓨터가 사용하는 가장 작은 측정단위이다. 전류가 흐르면 1, 아니면 0으로 간주한다.
하지만 아래와 같은 궁금중, 호기심도 가지는 경우도 있을것이다.
왜 1과 0으로만 표현할까? 전류의 세기에 따라 3진, 4진 그 이상도 가능하지 않을까?
당연히 가능하다. 또한 3진법 반도체 관련 기사도 존재한다.
그런데 한가지 놀라운 점은, 우리가 생각하기 훨씬 이전부터 3진, 4진법 이상을 사용하는 전자 제품이 있었다는것이다. 그런데 지금은 방금 본 기사처럼 3진법 반도체가 연구중에 있다고 한다.
이렇게 진행되는 이유는 여러가지가 존재한다.
2진법이 가장 명확하다.
2진법은 앞서 말했듯이 전류가 흐르면 1, 아니면 0이다.
하지만 3진법 이상은 흐르는 전류에 따라 구분을 해야 하는데, 이는 외부 환경에 따라 계산이 달라질수 있음을 의미한다.
플레밍의 오른손 법칙 이라는것을 과학수업시간에 배웠을 것이다. 오른손 엄지쪽으로 전류가 흐를때 나머지 오른손가락을 자연스럽게 말아쥔듯한 방향으로 자기력이 생성된다는 법칙이다. 반대로 이야기 한다면 적절한 방향의 자기장을 유도하면 전류를 생성할수 있다는 의미이다. (실제로 발전기에서 사용되는 원리이다.)
이런 플레밍의 오른손 법칙에 의해 어쩔때는 전류의 세기가 더욱 강화될수도 있지만, 그 반대의 경우도 존재한다. 이런 특성은 보내주는 전류의 세기가 점차 약해질수록 그 왜곡현상이 심하게 나타난다.
그런 이유에서 3진법 이상의 반도체는 전류의 세기가 외부의 영향을 받아 원하지 않는 결과를 만들어 낼수 있게 된다. 이는 범위를 더욱 세세하게 나누는 경우라면 더욱 취약하다.
이러한 이유에서 전류를 보냄, 보내지 않음 2가지만 사용하게 되었다.
저장단위
그래서 기계어는 0과 1만 사용하여 신호를 주고 받고, 데이터를 저장한다. 하지만 , 0과 1(참과 거짓) 두가지로 문자, 글, 동영상을 표현할수 없다.
따라서 하나의 문자를 표현하기위해 8비트를 묶어 바이트로 표현하며 몇개의 문단을 표현하기 위해 1000개의 바이트를 킬로바이트로 표현하고 1000개의 킬로바이트를 묶어 하나의 메가 바이트로 표현하고 1000개의 메가바이트를 기가바이트로 표현하는 형식이다.
ASCII
8비트를 하나로 묶어 하나의 문자를 표현한다고 언급했다. 이때 8비트로 표현 가능한 알파벳, 숫자, 특수문자를 하나하나 매핑한것이 바로 아스키 코드다.
하지만 아스키코드표에서는 127가지의 문자들만 확인이 가능하다.
아스키코드 표준을 확립할때 7비트 까지만 표준으로 확립하였으며, 나머지에 대해서는 표준이 아니기 때문에 운영체제마다 사용하는 테이블이 다를수 있다. (IBM 과 윈도우 테이블이 128번째부터 다른것을 확인할 수 있다.)
전통적으로 표기하는 저장단위
8bit = 1byte 1000byte = 1kb 1000kb = 1mb 1000mb = 1gb 1000gb = 1tb(테라바이트) 1000tb = 1pb(페타바이트) 1000pt = 1eb(요타바이트)
이렇게 구분된다.
이밖에도 니블(4비트), 워드(하나의 연산에서 옮길수 있는 데이터 단위. 32비트 환경이면 32비트가 1워드)등이 있다.
실제 컴퓨터가 사용하는 저장단위
하지만 컴퓨터는 2진수를 사용한다고 앞서 작성했다. 따라서 1천개의 바이트, 메가바이트들을 묶지 않고 2진수에 맞춰 1024개를 묶는다. 따라서 실제 저장 용량은 다음과 같다.
이전에는 단순히 1024Kb, 1024Mb, 1024GB 등으로 표현했다면 실제 저장용량을 정확하게 표기하기 위한 새로운 표기법 사용하여 KiB, MiB, GiB으로 작성한다.
8bit = 1byte 1024byte = 1KiB(키비바이트) 1024KiB = 1GiB(기비바이트) 1024GiB = 1TiB(테비바이트) 1024TiB = 1PiB(페비바이트) 1024PiB = 1EiB(요비바이트)
이와 관련하여 실제로 약 9.09TiB의 용량을 가진 저장장치는 10TB로 표기된다.
16진수 표기
16진수는 무엇일까? 0부터 15까지의 수를 숫자와 알파벳 일부로 표현하는것이 16진수 이다.
인간에게 익숙한 수를 16진수로 표현하면 다음과 같다.
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ....
1, 2, 3, 4, 5, 6, 7, 8, 9, A , B , C , D , E , F , 10
다만 16진수를 사용했음을 알리기 위해 prefix로 의미없는 0x를 추가한다.
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ....
0x1, 0x2, 0x3, 4, 5, 6, 7, 8, 9, 0xA , 0xB , 0xC , 0xD , 0xE , 0xF , 0x10
왜 16진수 일까?
가장 큰 이유는 4비트를 완벽하게 표현할수 있음과 동시에 2진수를 압축하여 표현할 수 있기 때문이다.
4비트는 기본적인 컴퓨터 구조론에서 사용하는 기초적인 단위이다. 컴퓨터 구조론에서는 메모리, 레지스터 등이 4비트를 기반으로 한다.
이때 32진수는 왜 사용하지 않냐고 생각할수 있다.
스택 익스체인지 에서도 비슷한 질문이 있다. 명심해야 할것은 16진수를 사용하던, 32진수를 사용하던 컴퓨터는 여전히 2진수를 사용한다는 것이다. 즉 16진수, 32진수 표기는 단지 컴퓨터를 사용하는 인간이 2진법을 더욱 쉽게 이해하기 위한 표기법이라는것. 또한 16진수를 사용하는것이 표준이다.
댓글남기기