Sco*_*zon 2 c bit-shift type-conversion bitwise-operators
如果我的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);
Run Code Online (Sandbox Code Playgroud)
Buffer的每个索引都有什么?我不确定类型转换是如何在逐位的水平上工作的.它是否将最重要的字节或最低有效字节传输Odometer到每个Buffer索引中?
要Buffer[3]存储
Buffer[3] = Odometer & 0xff;
Run Code Online (Sandbox Code Playgroud)
最后8位0xff00ff 00和0xff 之间的掩码
然后你向右移Odometer8位,这样你得到0x00ff00ff
要Buffer[2]存储
Buffer[2] = Odometer & 0xff;
Run Code Online (Sandbox Code Playgroud)
最后8位0x00ff00 ff和0xff 之间的掩码
和面具之间
0xff & 0x00 == 0x00
Run Code Online (Sandbox Code Playgroud)
而
0xff & 0xff == 0xff
Run Code Online (Sandbox Code Playgroud)
这样的结果是
Buffer[3] = 0x00;
Buffer[2] = 0xff;
Buffer[1] = 0x00;
Buffer[0] = 0xff;
Run Code Online (Sandbox Code Playgroud)
按位
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
Run Code Online (Sandbox Code Playgroud)
所以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
Run Code Online (Sandbox Code Playgroud)
而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
Run Code Online (Sandbox Code Playgroud)