-
1바이트는 왜 8비트일까?프로그래밍/의문 2016. 2. 2. 22:30반응형
컴퓨터가 처리하는 정보의
최소단위. 비트보다 높다. 옛날에는 4비트, 6비트를 1바이트로 삼는 컴퓨터도 있었으나, 현대(적어도 1984년 이후)의 대개의 컴퓨터 아키텍처에서, 1옥텟, 즉 8비트로 1바이트를 삼는다. 표준 C 언어에서는 '8비트 이상'을 1바이트로 삼도록 규정하고 있다."byte"는 1956년에 Dr. Werner Buchholz에 의해서 사용되었고, 이는 IBM의 IBM scratch computer를 디자인하는 동안 사용되었다. 이때는 4bit를 1byte로 설계되었다고 한다. 전형전인 I/O장비는 6bit를 1byte로 사용하다가, 나중에 System/360에 8bit를 1byte를 사용하기 시작하면서, 규격이 정해지고 표준화 되었다.
일정한 개수의 비트로 이루어진 연속된 비트열. ‘일정한 개수’가 항상 정해진 건 아니지만, 최근에는 사실상 1바이트를 8비트로 간주하는 경우가 흔하다.
이진 컴퓨터의 워드 안에서 주소로 표현할 수 있는 가장 작은 단위에 해당하는 연속된 비트열. 예를 들어서 CDC 6000 계열의 메인프레임은 60비트 부동 소수점 실수를 6비트짜리 바이트 10개로 나눴으며, 따라서 대문자 로마자와 숫자만을 표현할 수 있는 천공 카드에 결과를 출력하기가 용이했다. 또한 CDC의 경우 12비트 I/O를 사용했기 때문에 12비트를 1바이트라 부르기도 했다. 이 정의 역시 최근에는 대부분 8비트를 가리키지만, 역사적으로 6비트, 7비트, 9비트 등의 바이트가 존재했다.
==> 반드시 8비트 == 1바이트는 아니다.
몇몇 프로그래밍 언어의 자료형. 예를 들어 C의 경우 한 바이트는 실행 환경에서 쓰이는 문자들을 담을 수 있을 만큼 큰 단위(C 표준 3.5항)로 정의되며, 한 바이트를 담는
char
자료형은 부호가 있느냐 없느냐와 상관 없이 적어도 8비트 이상(5.2.4.2.1항)이어야 한다. 자바의byte
자료형은 항상 부호가 있으며 8비트로 정의된다.왜 굳이 8비트인가? 7bit, 16bit, 32bit 이면 안 되었던 건가? 라고 한다면,
컴퓨터 아키텍쳐가 영문권인 곳에서 발전했기 때문이라고 한다.
0101010 로 이루어진 전자신호를 사람이 인식할 수 있는 문자로 저장을 했어야 했는데,
이런 문자를 표현하는 코드들의 숫자가 7bit ~8bit 으로 충분했기 때문이라고 한다.
(ASCII : 제어문자(32개), 출력가능문자(영소문자, 영대문자, 숫자, 기타 기호, parity bit 등등)
현재도 ASCII extended 부호를 사용하고 있다. (7bit + 1bit)
이래서 1Byte에 문자 1개를 저장할 수 있는 8bit 구조가 된 것이라고 한다.
1바이트는 1캐릭터(Character)라고도 부른다.
1바이트를 가지고 한 개의 문자. 즉, 캐릭터를 표현할 수 있기 때문이다(사실 이렇게 되도록 1바이트를 정의하려고 했다).
이는 영어의 경우이고 다른 문자는 더 많은 바이트를 쓰는 경우가 많다.
바이트는 추상적인 단위이기 때문에 바이트보다 더 작은 단위를 나타내는 접두어는 존재하지 않는다. 다만 비트보다 크고 바이트보다 작은 단위는 몇 개가 있다.
1개당 2개의 정보를 표시 가능한 비트를 8개 묶은 1옥텟으로 2의 8제곱, 즉 256 종류의 정보를 나타낼 수 있어 숫자와 영문자[1]를 모두 표현할 수 있고 남는 공간에 특수문자까지 할당할 수 있다. 7비트보다 다루기 편하기 때문에 1옥텟=1바이트인 CPU가 나온 이래로 1옥텟이 사실상 표준 1바이트로 컴퓨터 세상을 평정했다. 사실, 7비트, 즉 128개만으로도 숫자와 영문자를 다 표현하고도 남는다. 실제로 아스키 코드는 7비트고, 이에 착안해서 실제로 7비트로 1바이트를 삼기도 한다.
사실상, byte는 computer에서 한번에 읽어 올수 있는 가장 작은 단위로 사용되었고, 그런 의미에서 bite가 제대로된 표현이며, bite는 "한입에 베어 물다"라는 의미를 담고 있다. byte의 단어의 변화는 초기에 과학자들이 규격을 정할때, bit와 bite와의 혼돈을 피해서 사용시에 실수를 줄이려는 의도가 담겨져 있다. 그래서 bite 대신에 오늘날 byte를 사용하는 것이다.
==> 이 부분은 확인이 필요하다. 나는 이 부분을 WORD로 알고있기 때문이다. 아니면 혹시 처리의 단위와 한 번에 읽어올 수 있는 단위는 다른 의미인 건가? 그렇다면 어느정도 납득이 간다. 우리는 프로그래밍을 할 때에도 어떤 데이터의 크기를 말할때 바이트 단위로 말하지, 비트나 워드라는 단위로 하지 않는다. 참고로 WORD는 CPU마다 값이 제각각이기 때문에 표준 단위가 없다고 한다.
==> 바이트는 추상적 단위
컴퓨터가 이진의 수만 처리하던 시대엔 바이트라는 것은 별다른 의미가 없었을지도 모른다. 하지만 컴퓨터가 점점 대중화되고, 많은 목적을 가지게 되면서 당대 충분히 많은 문자를 표현할 수 있을 8비트를 1바이트(Bite)로, 그리고 Bit와 Bite와의 혼란을 피하기 위해 바이트(Byte)로, 그리고 추후 표준화를 위해 8비트로 쓰기 시작했다는 것을 대강 파악할 수 있었다.
참고
https://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8
https://namu.wiki/w/%EB%B0%94%EC%9D%B4%ED%8A%B8
http://happyzoo.tistory.com/180
http://www.bobbemer.com/BYTE.HTM
https://kldp.org/node/153459
반응형'프로그래밍 > 의문' 카테고리의 다른 글
[c++] static 변수의 초기화 시점 (0) 2016.02.22 클라이언트의 shutdown send는 서버에 eof를 전달한다. (0) 2016.02.06 iocp 송신 관련 주의점 (0) 2016.01.26 strand로 동기화를 하려는데, 문제가 있다. (2) 2015.12.01 코드 안에 if~else 구문이 많다는 건 다른 성격의 것들을 한 데에 모아놨다는 것이다. (0) 2015.11.14