source

시스템 위치: 1바이트!= 8비트?

gigabyte 2022. 8. 18. 23:46
반응형

시스템 위치: 1바이트!= 8비트?

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

1바이트가 8비트라고 믿지 마세요.

사용하다CHAR_BIT비트와 바이트 간에 변환하기 위한 상수로서 8이 아닌

오늘날에는 어떤 실생활 시스템이 존재하며, 이것이 사실일까요?(I'm not sure if there are differences between C and C++ regarding this, or if it's actually language agnostic. Please retag if neccessary.)

구식 기계에서는 8비트 미만의 코드가 꽤 흔했지만, 지금은 대부분 사용되지 않고 사라졌습니다.

C와 C++는 다음 명령어를 위해 최소 8비트를 의무화하고 있습니다.char적어도 C89 규격까지 거슬러 올라가면 됩니다.[편집: 예를 들어 C90, § 5.2.4.2.1은 다음 조건을 충족해야 합니다.CHAR_BIT>= 8 및UCHAR_MAX>= 255.C89는 다른 섹션 번호(제2.2.4.2.1조)를 사용하지만 내용은 동일하다.이들은 "char"와 "byte"를 본질적으로 동의어로 취급합니다 [Edit: 예를 들어,CHAR_BIT는 "비트필드(바이트)가 아닌 최소 객체의 비트 수"로 설명됩니다.]

다만, 현재의 머신(대부분의 DSP)에서는, 최소 타입이 8비트보다 큰 것이 있습니다.최소 12비트, 14비트, 또는 16비트는 매우 일반적입니다.Windows CE 의 동작도 거의 같습니다.최소한의 타입은, Microsoft 의 컴파일러에서는 16 비트입니다.단, 그들은 치료하지 않습니다.char16비트로서 -- 대신에, 단순히 「Non-contracting」이라고 하는 이름의 타입을 서포트하고 있지 않습니다.char조금도.

DSP에 도움이 될 수 있는 코드를 기술하고 있지 않는 한 바이트는 8비트로 간주할 수 있습니다.모든 세계가 VAX(또는 Intel)는 아니지만 모든 세계가 통신, 데이터 공유, 공통 프로토콜 확립 등을 수행해야 합니다.우리는 옥텟에 구축된 프로토콜을 기반으로 하는 인터넷 시대에 살고 있으며, 바이트가 옥텟이 아닌 C 구현은 이러한 프로토콜을 사용하는 데 큰 어려움을 겪을 것입니다.

또한 POSIX와 Windows 모두 8비트 바이트를 가지고 있다는 점도 유의해야 합니다.이는 임베디드되지 않은 대상 머신의 100%를 커버하고 있으며, 최근에는 DSP가 아닌 임베디드 시스템의 대부분을 커버하고 있습니다.

CHAR_B로 DSP 코드 작업을 많이 하고 있습니다.IT부문: 16

오늘날 x86 프로세서의 C++ 세계에서는 1바이트가 8비트라고 해도 안전합니다.워드 사이즈가 2(8, 16, 32, 64)의 거듭제곱이 아닌 프로세서는 매우 드문 경우입니다.

항상 그렇지는 않았다.

Control Data 6600(및 그 형제) Central Processor는 60비트 워드를 사용하여 한 번에 하나의 워드만 수신인 지정할 수 있습니다.어떤 의미에서 CDC 6600의 바이트는 60비트였습니다.

DEC-10 바이트 포인터 하드웨어는 임의의 크기의 바이트로 동작했습니다.바이트 포인터는 바이트 크기를 비트 단위로 포함했습니다.바이트 크기가 3, 4, 9, 또는 18비트가 아니면 워드당 몇 개의 비트가 낭비된다는 것을 의미하기 때문에 바이트가 워드 경계를 넘어갈 수 있는지 기억나지 않습니다.(DEC-10에서는 36비트 워드가 사용되었습니다).

메인스트림 플랫폼의 평균 프로그래머로서 1바이트가 8비트가 되지 않는 것에 대해 크게 걱정할 필요는 없습니다.하지만, 저는 여전히CHAR_BIT내 코드에 상수가assert(또는 그 이상)static_assert) 8비트 바이트에 의존하는 모든 위치.그러면 안전할 거야

(해당 플랫폼이 해당되지 않는 것은 알고 있지 않습니다.

첫 번째 비트 수char님은 일반적으로 이 의존성이 상식에 의해 암시되지만 공식적으로 "시스템"이나 "기계"에 의존하지 않습니다.의 비트 수char구현(컴파일러)에만 의존합니다.8비트 이상의 컴파일러를 실장하는 것은 문제 없습니다.char시스템 또는 머신에 적합합니다.

둘째, 여러 임베디드 플랫폼이 있습니다.sizeof(char) == sizeof(short) == sizeof(int)각각 16비트를 탑재하고 있습니다(이러한 플랫폼의 정확한 이름은 기억나지 않습니다).또한, 잘 알려진 Cray 기계들은 32비트를 가진 모든 종류의 유사한 특성을 가지고 있었다.

Wikipedia에서:

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

역사에는 8의 배수가 되는 네이티브 워드를 사용하지 않는 기묘한 아키텍처가 많이 존재했습니다.오늘 이런 걸 보게 되면 나한테 알려줘

  • 인텔이 최초로 시판한 CPU는 인텔 4004(4비트)입니다.
  • PDP-8(12비트)

바이트의 크기는 지금까지 하드웨어에 의존해 왔으며 크기를 요구하는 명확한 표준은 없습니다.

임베디드한 것을 많이 하고 있는 경우는, 그것을 염두에 두는 것이 좋을지도 모릅니다.

HP Saturn의 Wikipedia 엔트리에서 참조용으로 하나 더 추가:

새턴 아키텍처는 니블 기반입니다. 즉, 데이터의 핵심 단위는 4비트이며, BCD(Binary-Coded Decimal) 자리 하나를 유지할 수 있습니다.

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

반응형