标题: 为什么这函数判断失败 [打印本页]

作者: Graves    时间: 2024-5-13 15:10
标题: 为什么这函数判断失败
u32 TEST_FUN(void)
{
    u16 low,high;
    u32 re;
    low=0xAAAA;
    high=0x5555;
    re=(u32)(high<<16|low);//////////                           [2:].zfill(8)
    return re;
}
if(TEST_FUN()==0x5555AAAA)
{
//判断失败,为啥这re不是0x5555AAAA?
}

作者: LaoYuTou    时间: 2024-5-13 15:37
强制类型转换位置错了  re=((u32)high<<16|low);//////////
作者: LaoYuTou    时间: 2024-5-13 15:38
你对结果强制类型转换,运算钱high还是u16类型,应该把high强制类型转换。类型全换为u32就好了。
作者: Graves    时间: 2024-5-13 15:51
LaoYuTou 发表于 2024-5-13 15:38
你对结果强制类型转换,运算钱high还是u16类型,应该把high强制类型转换。类型全换为u32就好了。

感谢,我再试试
作者: Graves    时间: 2024-5-13 16:01
qq475878026 发表于 2024-5-13 15:51
感谢,我再试试

确实是这样,学艺不精了。之前AD转换平均运算也没发现这问题,到这里才发现问题
作者: rundstedt    时间: 2024-5-16 22:50
完全没必要移位,太浪费时间了。
u32 i;
u16 *p=&i;
*p=0x5555;
++p;
*p=0xaaaa;

看上去跟你的代码差不多,但实际上没几个机器码,比你的执行起来快多了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1