ale*_*nst 3 c c++ bit-manipulation
我有这个简单的代码:
#include <stdio.h>
#include <stdint.h>
int main(void) {
uint16_t i = 0;
unsigned char *b = "Yh";
i = b[1] | (b[0] << 8);
printf("uint16_t: %u\n", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我将Y (HEX: 0x59, DEC: 89)和h (HEX: 0x68, DEC: 104)一个uint16_t有位运算.
所述Y被移动到左侧8个比特和h被加在最后.最终的内容i应该是89 104吧?
如果我然后打印i,我应该期待什么号码出来?我现在正在接受22888,我不知道为什么,也不是我应该得到的.
89现在是高8位,所以它是89*2 8 +104 = 22888.
在十六进制中,它更加明显:你取了0x59,向左移动了8位,给你0x5900,然后加了0x68.0x5968 = 22888.