gpt4 book ai didi

c - 此 C 代码的某些部分对我来说没有意义

转载 作者:太空狗 更新时间:2023-10-29 17:18:20 26 4
gpt4 key购买 nike

你好,考虑这段代码:

uint16_t dest_pid;
uint8_t *p;

pf->dest_pid = p[0] + (p[1] << 8) //(p[1] << 8) equals 0 right?

这段代码是嵌入式操作系统驱动程序的一部分。一些想法 该声明背后的想法可能是什么?或者我可能遗漏了一些重要的东西?

最佳答案

我假设您的 p被有意义地初始化(指向某个有效位置)。

然后在p[0] + (p[1] << 8) p[1]将被隐式提升为 unsigned在做左移之前<< 8 ,所以代码确实有意义(例如在像 ARM 这样的 32 位处理器上)。非正式地,它生成一个 16 位数字,其低 8 位来自 p[0]和更高的 8 位来自 p[1]

粗略地说,隐含的规则是在 C 中算术运算是在 int 上进行的。至少(并且永远不会像 shortuint8_tchar 这样的小数据)。但细节更复杂(并且从 C89 到 C99 和 C11 标准略有演变)。

关于c - 此 C 代码的某些部分对我来说没有意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32248138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com