大端小端の判断

1772 ワード

アドレス0 x 4000から格納を開始するとします.
0 x 12345678は32ビットの4バイトのデータで、最高バイトは0 x 12で、最低バイトは0 x 78です.
Little-endianモードCPUメモリに格納する方法は、次のとおりです.
(ハイバイトはハイアドレス、ローバイトはローアドレス)
メモリアドレス
0x4000
0x4001
0x4002
0x4003
コンテンツの保存
0x78
0x56
0x34
0x12
Big-endianモードCPUメモリに格納する方法は次のとおりです.
(ハイバイトはローアドレス、ローバイトはハイアドレス)
メモリアドレス
0x4000
0x4001
0x4002
0x4003
コンテンツの保存
0x12
0x34
0x56
0x78
上記の表から分かるように、
サイズモードを用いてデータを格納する主な違いは,格納されたバイト順で,大端方式は高位を低アドレスに格納し,小端方式は高位を高アドレスに格納することである.
大端方式を採用してデータの保存を行うのは人類の正常な思考に合って、小端方式を採用してデータの保存を行うのはコンピュータの処理に有利です.これまで,大端または小端を用いてデータ格納を行ってきたが,どちらが優れているか,どちらが劣っているかは定かではない.
IntelのPentiumのような小さなエンド方式でデータを保存するプロセッサシステムもあります.IBM半導体やFreescaleのPowerPCプロセッサなど、大端方式でデータ格納を行うプロセッサシステムもあります.プロセッサだけでなく,一部の周辺機器の設計においても,大端または小端を用いてデータ格納を行う選択がある.
問題1:C関数を書いてください、もしプロセッサーがBig_であるならばendianの場合、0を返します.リトルならendianの場合、1を返します.
int checkCPU( )
{
       {
                 union w
                 {  
                          int a;
                          char b;
                 } c;
                 c.a = 1;
           return  (c.b ==1);
       }
}

分析:
連合体unionの格納順序は,すべてのメンバが低アドレスから格納される.
小さい端でc.aをどのように保存しますか?                                                                 
アドレスA-------------------------------------------------|A|A+1|A+2|A+3|int a;0x01 |0x00   |0x00   |0x00 | ------------------------------------- |A        |char b; | 0x01| ---------         
大端でc.aをどのように格納しますか?    
アドレスA---------------------------------------------|A|A+1|A+2|A+3|int a;0x00   |0x00   |0x00    |0x01    | ------------------------------------------ |A      |char b; |0x00| ---------