2012-04-12 8 views
2

マスキングまたは整数から個々のビットを抽出することを扱う操作のいずれかを実行ビット演算子はエンディアンに依存しますか?私はいくつかのコードを書いたことがありますが、あるタイプのハードウェアにしかアクセスできない場合、演算子がエンディアンに依存しないことを実際に確認することはできません。バグがあれば教えてください。注:このコードは宿題の問題のために書かれた、と個人的な啓発された:あなたの助けをエンディアン依存、

void PrintDecimalIntegerInBinary (long long n) 
{ 
    PrintDecimalInBinaryRecursion(n, n >= 0); 
} 

void PrintDecimalInBinaryRecursion (long long n, bool sign) 
{ 
    if (n == 0) { 
     cout << (sign ? 0x0 : 0x1); 
    } 
    else { 
     PrintDecimalInBinaryRecursion((unsigned long long)n >> 1, sign); 
    cout << (n & 0x1); 
    }  
} 

感謝を。

答えて

5

エンディアンはデータのみが格納されている方法を決定し、ないそれが処理されていますか。したがって、ビット演算子またはビットシフトはエンディアンの影響を受けません。具体的には、0x1はエンディアンに関係なく同じものを意味します。

+0

です。したがって、8以上のスペース(つまり、int >> 9)をシフトしても、ハードウェアに基づいた結果は変わらないでしょうか?ありがとうございました! – Cindeselia