IT story

1 바이트! = 8 비트?

hot-time 2020. 9. 16. 20:56
반응형

1 바이트! = 8 비트? [복제]


이 질문에 이미 답변이 있습니다.

나는 항상 다음과 같은 문장을 읽을 때

크기가 8 비트 인 1 바이트에 의존하지 마십시오.

사용 CHAR_BIT된 비트 및 바이트 사이의 변환 상수로 (8) 대신에

등등. 오늘날 어떤 실제 시스템이 존재합니까? (이와 관련하여 C와 C ++간에 차이가 있는지 또는 실제로 언어에 구애받지 않는지 확실하지 않습니다. 필요한 경우 태그를 다시 지정하십시오.)


구형 컴퓨터에서는 8 비트보다 작은 코드가 상당히 일반적 이었지만 대부분은 몇 년 동안 죽어 없어졌습니다.

C와 C ++는 최소한char C89 표준까지 거슬러 올라가는에 대해 최소 8 비트를 요구했습니다 . [편집 : 예를 들어, C90, §5.2.4.2.1에는 CHAR_BIT> = 8 및 UCHAR_MAX> = 255 가 필요합니다 . C89는 다른 섹션 번호 ( §2.2.4.2.1이 될 것이라고 생각 합니다)를 사용하지만 동일한 내용을 사용합니다.] 그들은 "문자"와 "바이트"를 본질적으로 동의어로 취급합니다 [편집 : 예를 들어, CHAR_BIT"비트 필드 (바이트)가 아닌 가장 작은 개체에 대한 비트 수"로 설명 됨).

그러나 가장 작은 유형이 8 비트보다 큰 현재 머신 (대부분 DSP)이 있습니다. 최소 12, 14 또는 16 비트가 상당히 일반적입니다. Windows CE는 거의 동일합니다. 가장 작은 유형 (적어도 Microsoft의 컴파일러 사용시)은 16 비트입니다. 그러나 그들은 a 를 16 비트로 취급 하지 않습니다 . char대신 그들은 단순히 명명 된 유형을 전혀 지원하지 않는 (부적합한) 접근 방식을 취 char합니다.


오늘날 x86 프로세서의 C ++ 세계에서는 1 바이트가 8 비트에 의존하는 것이 매우 안전합니다. 워드 크기가 2의 제곱 (8, 16, 32, 64)이 아닌 프로세서는 매우 드뭅니다 .

항상 그렇지는 않았습니다.

제어 데이터 6600 (및 그 형제) 중앙 프로세서는 60 비트 워드를 사용했으며 한 번에 한 단어 만 처리 할 수있었습니다. 어떤 의미에서 CDC 6600의 "바이트"는 60 비트였습니다.

DEC-10 바이트 포인터 하드웨어는 임의 크기의 바이트로 작동했습니다. 바이트 포인터는 바이트 크기 (비트)를 포함합니다. 나는 바이트가 단어 경계를 넘을 수 있는지 기억이 나지 않는다. 제 생각에는 그렇게 할 수 없다고 생각합니다. 즉, 바이트 크기가 3, 4, 9 또는 18 비트가 아니면 단어 당 몇 개의 낭비 비트를 갖게 될 것입니다. (DEC-10은 36 비트 워드를 사용했습니다.)


DSP에서 유용 할 수있는 코드를 작성하지 않는 한, 바이트가 8 비트라고 가정 할 수 있습니다. 전 세계가 VAX (또는 Intel)가 아닐 수도 있지만 전 세계가 통신하고, 데이터를 공유하고, 공통 프로토콜을 설정하는 등의 작업을해야합니다. 우리는 옥텟에 구축 된 프로토콜을 기반으로 구축 된 인터넷 시대에 살고 있으며, 바이트가 옥텟이 아닌 C 구현은 이러한 프로토콜을 사용하는 데 정말 어려움을 겪을 것입니다.

POSIX와 Windows 모두에 8 비트 바이트가 있다는 점도 주목할 가치가 있습니다. 이는 흥미로운 비 임베디드 시스템의 100 %를 포함하며 요즘에는 비 DSP 임베디드 시스템의 상당 부분도 포함합니다.


에서 위키 백과 :

바이트 크기는 처음에 기존 텔레타이프 라이터 코드의 배수로 선택되었습니다. 특히 미군 (Fieldata)과 해군에서 사용하는 6 비트 코드입니다. 1963 년 미국 정부의 여러 지점에서 호환되지 않는 텔레 프린터 코드 사용을 종식시키기 위해 7 비트 코드 인 ASCII가 연방 정보 처리 표준으로 채택되어 6 비트 바이트가 상업적으로 쓸모 없게되었습니다. 1960 년대 초 AT & T는 장거리 국선에 디지털 전화를 처음으로 도입했습니다. 이들은 8 비트 µ-law 인코딩을 사용했습니다. 이 대규모 투자는 8 비트 데이터의 전송 비용을 절감 할 것을 약속했습니다. 디지털 전화에 8 비트 코드를 사용하면 8 비트 데이터 "옥텟"이 초기 인터넷의 기본 데이터 단위로 채택되었습니다.


메인 스트림 플랫폼에서 평균 프로그래머로서, 당신은 할 수 없습니다 8 비트없는 너무 많은 일에 대한 바이트를 걱정해야합니다. 그러나 나는 여전히 CHAR_BIT내 코드 에서 상수를 사용 하고 assert(또는 더 나은 static_assert) 8 비트 바이트에 의존하는 모든 위치를 사용합니다. 그것은 당신을 안전한 편에 두어야합니다.

(나는 그것이 사실이 아닌 관련 플랫폼을 알지 못합니다).


첫째, char이 종속성은 일반적으로 상식에 의해 암시되지만 공식적으로 "시스템"이나 "머신"에 의존하지 않습니다. 의 비트 수는 구현 (즉, 컴파일러) char에만 의존합니다 . "일반적인"시스템이나 시스템 대해 8 비트 이상을 포함하는 컴파일러를 구현하는 데 문제가 없습니다 .char

두 번째로, sizeof(char) == sizeof(short) == sizeof(int)각각 16 비트를 가진 여러 임베디드 플랫폼 이 있습니다 (이 플랫폼의 정확한 이름을 기억하지 못합니다). 또한 잘 알려진 Cray 기계는 이러한 모든 유형이 32 비트를 갖는 유사한 속성을 가졌습니다.


역사상, 8의 배수가되는 네이티브 단어 크기를 사용하지 않는 이상한 아키텍처가 많이 존재했습니다. 오늘이 중 하나라도 발견하면 알려주세요.

  • Intel의 첫 번째 상용 CPU는 Intel 4004 (4 비트) 였습니다.
  • PDP-8 (12 비트)

바이트의 크기는 역사적으로 하드웨어에 따라 다르며 크기를 요구하는 명확한 표준은 없습니다.

임베디드 작업을 많이하는 경우 명심하는 것이 좋습니다.


나는 16의 CHAR_BIT를 사용하여 많은 임베디드 및 현재 DSP 코드 작업을 수행합니다.


HP Saturn의 Wikipedia 항목에서 참조로 하나 더 추가 :

Saturn 아키텍처는 니블 기반입니다. 즉, 데이터의 핵심 단위는 4 비트이며 이진 코드 십진수 (BCD) 1 자리를 보유 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/5516044/system-where-1-byte-8-bit

반응형