サイズ端の解析


大端モード:大端モードとは、データの低位をメモリのハイランドアドレスに格納し、データの高位をメモリの低アドレスに格納することを指す.このような格納モードは、データを文字列の順序として処理することに似ている.アドレスは小さいから大きいへ増加し、データは高位から低位へ放出される.
小端モード:小端モードとは、データの下位ビットをメモリの低アドレスに格納し、データの上位ビットをメモリの上位アドレスに格納することを意味する.
サイズエンドモードの由来
なぜサイズ端モードの区別があるのでしょうか?これは,コンピュータシステムでは,各アドレスユニットが1バイト,1バイトが8 bitに対応するバイト単位であるためである.しかしC言語では8 bitのcharのほか、16 bitのshort型もあり、32 bitのlong型(具体的なコンパイラによる)また、ビット数が8ビットより大きいプロセッサ、例えば16ビットまたは32ビットのプロセッサでは、レジスタ幅が1バイトよりも大きいため、必然的に複数のバイトをどのように配置するかという問題がある.そのため、マクロストレージモードとマクロストレージモードが発生する.例えば、16 bitのshort型xでは、メモリ内のアドレスは0 x 0100である、xの値は0 x 1122であり、0 x 11は高バイト、0 x 22は低バイトである.マクロモードでは、0 x 11をローアドレス、すなわち0 x 010に、0 x 22をハイアドレス、すなわち0 x 011に配置する.小端モードは、ちょうど逆です.我々がよく使用するX 86構造は小端モードであり、KEIL C 51は大端モードである.多くのARM,DSPは小端モードである.一部のARMプロセッサでは、ハードウェアによって大端モードか小端モードかを選択することもできます.
検証プログラム:
#include 

void check_cpu(void)
{
        int a = 0x0608;
        char *str;
        str = (char *)&a;

        printf("value = %d
",*str); if(0x06 == *str) { printf("this is big end
"); } else { printf("this is little end
"); } } void check_cpu_union(void) { union { int a; char c; }end; end.a = 0x0608; printf("value = %d
",end.c); if(0x06 == end.c) { printf("this is big end
"); } else { printf("this is little end
"); } } int main(void) { check_cpu(); check_cpu_union(); return 0; }