使用uint16_t和按位操作时期望的数字

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,我不知道为什么,也不是我应该得到的.

nul*_*ptr 5

89现在是高8位,所以它是89*2 8 +104 = 22888.

在十六进制中,它更加明显:你取了0x59,向左移动了8位,给你0x5900,然后加了0x68.0x5968 = 22888.