我试图更好地理解按位运算符。我有许多类型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));
}
在上面的代码示例中说num
是 9。那么字节数组应该像这样存储在内存中:(
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;
}
这种行为正确吗?为什么我会看到这种行为?