私はビット演算子をよりよく理解しようとしています。uint32_t
バイトごとに出力しようとしているタイプがいくつかあります。それを行うコードは次のとおりです。
void printByteWise(uint32_t num) {
printf("byte 1 = %u\n", (num & 0xFF000000));
printf("byte 2 = %u\n", (num & 0x00FF0000));
printf("byte 3 = %u\n", (num & 0x0000FF00));
printf("byte 4 = %u\n", (num & 0x000000FF));
}
上記のコードサンプルで9と言いnum
ます。次に、バイト配列は次のようにメモリに格納する必要があります:(
09 00 00 00
アドレスの昇順)。もしそうなら、出力は次のようになります:
byte 1 = 09
byte 2 = 00
byte 3 = 00
byte 4 = 00
しかし、私が得る出力は次のとおりです:
byte 1 = 0
byte 2 = 0
byte 3 = 0
byte 4 = 9
私は次のように取得されるリトルエンディアンのシステムを使用しています。
int is_bigEndian() {
int i = 1;
char *low = (char *) (&i);
return *low ? 0 : 1;
}
この動作は正しいですか?なぜ私はこの振る舞いを見ているのですか?