gpt4 book ai didi

c - C 中的按位移位问题

转载 作者:太空狗 更新时间:2023-10-29 17:13:48 25 4
gpt4 key购买 nike

我有一个 32 位数字,我想从中创建 4 个 8 位数字。例如:

如果 32 位数字是 0xABCD1234,8 位数组必须是这样的:

dataArray[0] = 0x34;
数据数组[1] = 0x12;
数据数组[2] = 0xCD;
数据数组[3] = 0xAB;

所以我发现我可以通过移动 32 位值并屏蔽 LSB 部分来实现它。下面的代码片段效果很好:

uint32_t uniquenumber = 0xABCD1234; 
uint8_t dataArray[8];
int j;
uint32_t shifted = 0;

for(j=0;j<4;j++)
{
shifted = (uniquenumber>>(j*8));
dataArray[j] = shifted & (0xFF);
}

但是,如果我尝试通过删除 shifted 变量并将其计算直接传输到主计算来缩短它,则它不起作用。我无法弄清楚区别,为什么它不起作用。这是无效的已编辑代码段。

uint32_t uniquenumber = 0xABCD1234; 
uint8_t dataArray[8];
int j;

for(j=0;j<4;j++)
{
dataArray[j] = (uniquenumber>>(j*8)) & (0xFF);
}

第二个片段的输出在这里:

dataArray[0] = 0x34;
数据数组[1] = 0x12;
数据数组[2] = 0x00;//错误的。
数据数组[3] = 0xAB;

顺便说一下,这是一个在微 Controller 上运行的嵌入式程序。我不认为这是打印问题,因为我没有通过打印操作观察到它。我在 Debug模式下使用 Watch 观察它。此外,我可以在同一窗口中观察到第一个片段,并且值是正确的。

更新:这是两种方式的分解。

对于第一个片段:

enter image description here

对于第二个片段:

enter image description here

编译器:ARM GCC 4.9-2015-q1-update

调试器:Cypress PSoC Creator 3.3

单片机:CYBLE-022001

我会联系 Cypress,我想他们可以就此给出提示。如果我们解决了,我会发布答案。

最佳答案

问题已解决:感谢@LPs,

我将断点向下传输到 3 行,错误的值变为真。我不知道为什么,但我已经将我的断点放在我确定 for 循环已经完成的地方。现在效果很好。

关于c - C 中的按位移位问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38609995/

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