取高8位:
例1:对于有符号数,取高8位可以使用右移操作;
对于无符号数,取高8位可以使用左移和右移操作。左移操作会将高位填充为0,适用于无符号数。
例如:left=(number>>8)&0XFF; //先取高八位
0001>>4 0000 0001 1=01 右移可能会=不移动
0001<<4 0001 0000 1 !=10 左移结果会产生变化
例2:uint32_t value = 0xABCD1234;
value & 0x0000FFFF
: 这是提取低16位,结果是0x1234
。- 直接写入寄存器0xABCD1234同样是提取低16位,结果是
0x1234,
在寄存器写入时,通常顺序是先写低位后写高位,这是常见的硬件设计逻辑。
value >> 16
: 将value
右移16位,结果是0x0000ABCD
,这就是提取的高16位。
取低8位:&0xFF
例如:right=number&0XFF; //再取第八位
无论是取高8位还是低8位,都可以通过与0xFF进行按位与操作来得到所需的数据。
合并高低8位:
例如: number_three=left;
number_three<<=8; 移出低8位所需要的空间
number_three|=right;