位级别的 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
如果我的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