gpt4 book ai didi

c - 位移位不正确?

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:10 24 4
gpt4 key购买 nike

我正在使用 Si Labs IDE 用 C 语言对 8051 进行编程。我目前有三个字节:address_byte3、address_byte2 和 address_byte1。然后我将一个变量 address_sum 初始化为一个 unsigned long int 然后对其进行了以下操作......

address_sum=(address_byte3<<16)+(address_byte2<<8)+(address_byte1);

如果 address_byte3、address_byte2 和 address_byte10x92、0x56 和 0x78,这个操作会让我相信加载到 address_sum 中的值>,分别为 0xXX925678。相反,我得到的值是 0xXX005678。我的逻辑似乎很合理,但我又是编写代码的人,所以我有偏见,可能会因自己的无知而蒙蔽双眼。有没有人有关于为什么 address_byte 的值“丢失”的解决方案或解释?

谢谢。

最佳答案

短于 int 的变量在对它们进行计算时被提升为 int。看起来您的 int 类型是 16 位的,因此将它移动 16 位不正确。

您应该将变量显式转换为结果类型(unsigned long):

address_sum = ((unsigned long)address_byte3<<16) +
((unsigned long)address_byte2<<8) +
(unsigned long)address_byte1;

最后一次转换是多余的,但不会造成伤害。

关于c - 位移位不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43376973/

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