programing

엔디언은 바이트의 비트 순서를 나타낼 수 있습니까?

magicmemo 2023. 7. 15. 10:00
반응형

엔디언은 바이트의 비트 순서를 나타낼 수 있습니까?

Chris Adamson의 "Learning Core Audio: A Hands-On Guide to Audio Programming for Mac and iOS"를 읽고 있는데, 어느 시점에서 저자는 빅 엔디언을 다음과 같이 설명합니다.

바이트나 단어의 높은 비트는 낮은 비트보다 수치적으로 더 중요합니다.

하지만 지금까지 빅리틀 엔디안의 문제는 바이트 순서에만 적용되고 비트 순서에는 적용되지 않는다고 생각했습니다.작은 엔디언 시스템이든 큰 엔디언 시스템이든 상관없이 한 바이트의 비트 순서(왼쪽에서 오른쪽)는 동일합니다.내가 틀렸나요?저자가 틀린가요?아니면 제가 그의 요점을 잘못 이해했나요?

일반적으로 바이트 내의 비트를 개별적으로 처리할 수 없기 때문에 일반적으로 "비트 엔디언성"이라는 개념은 없습니다.

이는 언급된 질문에 대한 답변이 아니라 이미 다른 사람들이 잘 답변했습니다. 하지만 관련 개념을 명확하게 설명하기 위해 일부 용어를 설명하는 각주입니다.특히, 이것은 고양이에게 한 것이 아닙니다.


  • 엔디안니스 및 바이트 순서

    바이트보다 큰 값이 저장되거나 여러 바이트로 직렬화되는 경우 구성 요소 바이트가 저장되는 순서를 바이트 순서 또는 엔디안 또는 엔디안이라고 합니다.

    역사적으로 "big-endian", "little-endian", "PDP-endian" 또는 "middle-endian"의 세 가지 바이트 순서가 사용되었습니다.

    엔디안 및 리틀 엔디안 바이트 순서 이름은 바이트를 순서대로 지정하는 방식에서 파생됩니다. 빅 엔디안은 가장 중요한 바이트(논리 값에 가장 영향을 많이 미치는 바이트)를 먼저 지정하고, 연속적인 바이트는 유의한 순서대로 지정하며, 리틀 엔디안은 유의하지 않은 바이트를 먼저 지정합니다.중요성이 증가하는 순서대로 연속적인 바이트 수와 함께.

    바이트 순서는 정수 유형과 부동 소수점 유형에 따라 다를 수 있으며 별도의 하드웨어 단위로 구현될 수도 있습니다.그러나 대부분의 하드웨어에서는 바이트 순서가 동일합니다.
     

  • 비트 순서

    비트 순서는 바이트가 아닌 개별 비트를 포함한다는 점을 제외하면 엔디언과 매우 유사한 개념입니다.두 개념은 관련이 있지만 동일하지는 않습니다.

    비트 순서는 비트가 직렬, SPI 또는2 IC 버스를 차례로 통해 직렬화되는 경우에만 의미가 있습니다.

    비트가 바이트나 단어처럼 하나의 단위로 병렬로 사용되는 더 큰 그룹에서 참조될 때 순서는 없습니다. 레이블링과 유의성있습니다.(구체적인 순서가 없는 것은 그들이 하나씩 순차적으로 접근하는 것이 아니라 하나의 그룹으로 병렬적으로 접근하고 조작되기 때문입니다.그룹으로서의 그들의 해석은 각각 다른 의미를 산출하며, 우리 인간은 참조하기 쉽도록 라벨을 붙이거나 번호를 매길 수 있습니다.)
     

  • 비트 유의성

    비트 그룹이 이진 값으로 처리되는 경우 최하위 비트와 최상위 비트가 있습니다.이러한 이름은 최하위 비트를 변경할 경우 비트 그룹의 값이 가능한 가장 작은 양만큼 변경되고, 최상위 비트를 변경할 경우 비트 그룹의 값이 가능한 가장 큰 양만큼 변경된다는 사실에서 파생되었습니다(단일 비트 변경).

    를 들어 a, b, c, d e의 5비트 그룹이 5비트 부호 없는 정수 값을 형성한다고 가정합니다.a가 가장 유의하고 e가 가장 유의하지 않으며 나머지 세 개가 유의성이 감소하는 순서라면 부호 없는 정수 값은 다음과 같습니다.
        = a·24 + b·23 + c·22 + d·21 + e·20

        = 16a + 8b + 4c + 2d + e

    즉, 비트 의미는 비트 그룹의 수학적(또는 논리적) 해석에서 파생되며, 비트가 일부 버스에서 직렬화될 수 있는 순서 및 사람이 할당한 레이블이나 숫자와 완전히 별개입니다.

    이는 부동 소수점 숫자에 대해서도 수치 값을 논리적으로 구성하는 모든 비트 그룹에 해당됩니다.
     

  • 비트 레이블 또는 비트 번호 지정

    예를 들어 설명서의 참조 편의를 위해 개별 비트에 레이블을 지정하는 것이 유용한 경우가 많습니다.이것은 본질적으로 임의적입니다. 그리고 실제로 위의 예에서 a부터 f까지 문자를 사용했습니다.숫자가 문자보다 더 쉬운 경우가 많습니다. 27비트 이상에 단일 문자로 레이블을 지정하는 것은 쉽지 않습니다.

    비트에 숫자를 표시하는 두 가지 방법이 있습니다.

    현재 가장 일반적인 것은 중요도에 따라 비트에 레이블을 붙이는 것이며, 비트 0은 최하위 비트를 나타냅니다.비트 i는 논리적 값 2를 가지기i 때문에 유용합니다.

    IBM의 POWER 문서와 같은 특정 아키텍처의 문서에서 가장 중요한 비트는 중요도가 낮은 순서대로 0으로 표시됩니다.이 경우 비트의 논리적 값은 해당 단위의 비트 수에 따라 달라집니다.단위에 N비트가 있으면 비트 i의 논리 값은 2입니다N-i-1.

    이 순서가 이상하게 느껴질 수도 있지만, 이러한 아키텍처는 모두 빅 엔디안이며, 인간이 이러한 시스템에서 가장 중요한 것이 우선이라는 것을 기억하거나 가정하는 것이 유용할 수 있습니다.

    그러나 이는 완전히 임의적인 결정이며, 두 경우 모두 시스템의 실제 성능에 영향을 미치지 않고 다른 비트 레이블링 체계로 문서를 작성할 수 있습니다.이는 왼쪽에서 오른쪽으로 쓸 것인지, 오른쪽에서 왼쪽으로 쓸 것인지(또는 위에서 아래로 쓸 것인지)를 선택하는 것과 같습니다. 사용자가 관례를 알고 이해하는 한 내용은 영향을 받지 않습니다.
     

바이트 순서와 비트 레이블링 사이에는 약간의 상관 관계가 있지만 위의 네 가지 개념은 모두 별개입니다.

바이트 순서와 비트 레이블링 사이에는 상관관계가 있습니다. 대부분의 빅 엔디언 하드웨어에 대한 설명서에서 가장 중요한 비트가 0인 비트 레이블링을 사용한다는 점에서 이는 사람이 선택한 사항 때문입니다.

에서, C 컴파일러가 구조체에 비트 필드를 채우는 순서는 컴파일러와 아키텍처마다 다릅니다.그것은 C 표준에 의해 전혀 명시되어 있지 않습니다.이 때문에 이진 파일을 비트 필드가 있는 구조체 유형으로 읽는 것은 대개 좋지 않습니다. (비록 그것이 어떤 특정한 기계와 컴파일러에서 작동한다고 해도, 그것이 다른 컴퓨터와 컴파일러에서 작동한다는 보장은 없습니다; 종종 그렇지 않습니다.)따라서 코드 이동성이 떨어집니다.)대신, 버퍼에 읽기, 그리고 배열unsigned char도우미 액세스 기능을 사용하여 비트 이동을 사용하여 어레이에서 비트 필드를 추출합니다.<<,>> s(), 이진 또는 s()|및 마스킹 및 , ) 및킹및마(스, )&).

비트 순서와 같은 것이 존재하는 유일한 의미는 비트 필드에 비트가 할당되는 순서입니다.예를 들어, 다음과 같습니다.

union {
    struct {
        unsigned char a:4;
        unsigned char b:4;
    } bf;
    unsigned char c;
};

구에따라, 은현표의 bf.a의 상위 4비트를 차지할 수 있습니다.c 는비또의 4트은의 .c비트 필드 멤버의 순서가 바이트 순서와 일치하는지 여부는 구현 정의됩니다.

비트 순서의 측면에서 바이트의 "엔디안니스"는 비트를 개별적으로 처리할 수 있는 이국적인 시스템을 사용하지 않는 한 실제로는 문제가 되지 않습니다.유선으로 데이터를 전송하는 방법을 결정할 때 문제가 될 수 있지만, 이러한 결정은 일반적으로 하드웨어 수준에서 이루어집니다.

오디오

오디오 스트리밍과의 관련성 측면에서 매우 중요할 수 있습니다.디지털 오디오 스트림을 아날로그 오디오 신호로 변환하는 하드웨어는 스트림의 비트가 특정 순서에 있을 것으로 예상할 수 있습니다.만약 그들이 틀렸다면, 그 소리는 완전히 망가질지도 모릅니다.아마도 당신의 책의 저자가 이것에 대해 자세히 설명할 것입니다.어쨌든, 앞에서 언급했듯이, 이것은 일반적으로 하드웨어 수준에서 결정되며 사용자 또는 커널 수준에서 프로그래밍할 때 실제로는 문제가 되지 않습니다.일반적으로 업계 표준은 두 개의 하드웨어가 서로 데이터를 전송하는 방법을 정의합니다.당신의 모든 하드웨어가 비트엔디언에 동의하는 한, 모든 것이 좋습니다.

위키피디아에서 더 읽어보기.

바이트 내부의 비트 순서는 의미가 없으며 바이트 내부의 비트는 주소 지정이 불가능하므로 엔디언 정의에 대한 참조로 사용할 이 비트 순서를 정의할 수 없습니다.비트와 달리 바이트는 주소 지정이 가능하므로 little 또는 big endian이 의미하는 바를 정의하기 위한 참조로 사용할 수 있는 주소 순서가 있습니다.

은 라는인받수있다습니도을을라는 인상을 .Left shift <<또는Right Shift >>비트 단위 연산자는 바이트 내에 정의된 비트 순서가 있음을 간접적으로 암시하지만 그렇지 않습니다.두는 가장 왼쪽으로 갈때.Left shift, 의 곱셈은 2의 곱셈과 같습니다.Right shift부호 없는 정수의 경우 2로 나눗셈하는 것과 동일한 효과를 갖습니다.

비트 5는 &byte+5bit 주소의 비트가 아닌 인덱스 5의 비트입니다.컴퓨터는 모든 비트 작업을 물리적 비트가 아닌 인덱스 비트로 이해합니다.

물론 네트워크 프로토콜이나 SPI 버스와 같은 주변 장치에서 특정 비트 시퀀스를 보장해야 하는 경우 "비트 엔디언"은 여전히 중요하지만, 이 경우 라이브러리에서 "데이터는 항상 MSB 먼저 전송됩니다"와 같은 말을 할 수 있습니다. 이는 각 바이트가 가장 중요한 비트로 먼저 전송된다는 것을 의미합니다.그리고 그것이 그것을 해결합니다.

언급URL : https://stackoverflow.com/questions/16803397/can-endianness-refer-to-bits-order-in-a-byte

반응형