位级别的 C 中的显式类型转换

Explicit Type Conversion in C on a bit level

如果我的c代码是:

unsigned char Buffer[4] = { 0, 0, 0, 0}; 
unsigned long Odometer = 0xff00ff00;

Buffer[3] = Odometer & 0xff;

Odometer = Odometer >> 8;
Buffer[2] = (unsigned char)(Odometer & 0xff);

Odometer = Odometer >> 8;
Buffer[1] = (unsigned char)(Odometer & 0xff);

Odometer = Odometer >> 8;
Buffer[0] = (unsigned char)(Odometer & 0xff);

Buffer的各个索引到底是什么?我不确定类型转换如何在位级别上工作。它是否将最高有效字节或最低有效字节从 Odometer 传输到每个 Buffer 索引?

存储到Buffer[3]

Buffer[3] = Odometer & 0xff;

最后 8 位 0xff00ff00 和 0xff

之间的掩码

然后将 Odometer 右移 8 位,得到 0x00ff00ff


存储到Buffer[2]

Buffer[2] = Odometer & 0xff;

最后 8 位 0x00ff00ff 和 0xff

之间的掩码

和掩码之间

0xff & 0x00 == 0x00

0xff & 0xff == 0xff

所以结果

Buffer[3] = 0x00;
Buffer[2] = 0xff;
Buffer[1] = 0x00;
Buffer[0] = 0xff;

按位

0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

所以 0x00 和 0xff 看起来像那样

|0|0|0|0|0|0|0|0|
|1|1|1|1|1|1|1|1|
-----------------
|0|0|0|0|0|0|0|0| <-- res

而 0xff 和 0xff 看起来像那样

|1|1|1|1|1|1|1|1|
|1|1|1|1|1|1|1|1|
-----------------
|1|1|1|1|1|1|1|1| <-- res