36

Chris Adamson による「Learning Core Audio: A Hands-On Guide to Audio Programming for Mac and iOS」を読んでいて、ある時点で著者はビッグエンディアンを次のように説明しています。

バイトまたはワードの上位ビットは、数値的に下位ビットよりも重要です。

ただし、これまで、ビッグエンディアンの問題はバイトオーダーにのみ適用され、ビットオーダーには適用されませんでした。1 バイトのビット順序 (左から右) は、リトルエンディアン システムであるかビッグ エンディアン システムであるかに関係なく同じです。私が間違っている?作者が悪いの?それとも、私は彼の主張を誤解しましたか?

4

5 に答える 5

25

「ビット順序」のようなものがある唯一の意味は、ビットがビットフィールドに割り当てられる順序です。たとえば、次のようになります。

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

実装に応じて、 の表現はの上位 4 ビットまたは の下位 4 ビットをbf.a占める可能性があります。ビットフィールド メンバーの順序がバイト オーダーと一致するかどうかは、実装によって定義されます。cc

于 2013-05-29T02:31:51.633 に答える
13

ビット順序に関するバイトの「エンディアン」は、ビットを個別にアドレス指定できるエキゾチックなシステムを使用していない限り、実際には問題になりません。これは、ネットワーク経由でデータを送信する方法を決定する際に問題になる可能性がありますが、通常、この決定はハードウェア レベルで行われます。

オーディオ

オーディオ ストリーミングとの関連性という点では、非常に重要です。デジタル オーディオのストリームをアナログ オーディオ信号に変換する役割を担うハードウェアは、ストリーム内のビットが特定の順序であると想定する場合があります。それらが間違っていると、サウンドが完全にバタバタしてしまう可能性があります。おそらくあなたの本の著者はこれについて詳しく説明していますか?いずれにせよ、前述したように、これは通常ハードウェア レベルで決定され、ユーザーまたはカーネル レベルでプログラミングする場合には、実際には問題になりません。一般に、業界標準では、2 つのハードウェアが相互にデータを送信する方法が定義されています。すべてのハードウェアがビット エンディアンに一致している限り、すべて問題ありません。

ウィキペディアでさらに読む。

于 2013-05-29T02:49:48.127 に答える
8

バイト内のビットの順序は意味がありません。バイト内のビットはアドレス指定できないため、このビットの順序を定義してエンディアンの定義の参照として使用することはできません。ビットとは異なり、バイトはアドレス指定可能であるため、リトルエンディアンまたはビッグ エンディアンの意味を定義するための参照として使用できるアドレス順序があります。

Left shift <<またはRight Shift >>ビット単位の演算子は、バイト内にビットの順序が定義されていることを間接的に暗示しているという印象を受けるかもしれませんが、そうではありません。この 2 つの用語は、最下位ビットが右に位置し、左に行くほどビットの値が高くなる抽象的なバイト表現に基づいていますが、定義上Left shift、2 による乗算と同じ効果Right shiftがあり、2 による除算と同じ効果があります。 (符号なし整数の場合)。

于 2014-04-29T16:17:56.557 に答える