我有这个简单的代码:

#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;
}

如您所见,我通过按位运算将 Y (HEX: 0x59, DEC: 89)h (HEX: 0x68, DEC: 104) 添加到 uint16_t 中。
Y 移动到左侧 8 位,h 被添加到最后。i 的最终内容应该是 89 104 吧?

如果我然后打印 i ,我应该期待什么数字出来?
我目前正在获取 22888,但我不确定为什么,也不知道这是否是我应该得到的。

最佳答案

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

在十六进制中,它更明显:您取 0x59,将其左移 8 位,得到 0x5900,然后添加 0x68。 0x5968 = 22888。

关于c++ - 使用 uint16_t 和按位运算时预期的数字是多少,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28137506/

10-11 16:06