找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 542|回复: 5
打印 上一主题 下一主题
收起左侧

为什么这函数判断失败

[复制链接]
跳转到指定楼层
楼主
ID:192020 发表于 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?
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1080935 发表于 2024-5-13 15:37 | 只看该作者
强制类型转换位置错了  re=((u32)high<<16|low);//////////
回复

使用道具 举报

板凳
ID:1080935 发表于 2024-5-13 15:38 | 只看该作者
你对结果强制类型转换,运算钱high还是u16类型,应该把high强制类型转换。类型全换为u32就好了。
回复

使用道具 举报

地板
ID:192020 发表于 2024-5-13 15:51 | 只看该作者
LaoYuTou 发表于 2024-5-13 15:38
你对结果强制类型转换,运算钱high还是u16类型,应该把high强制类型转换。类型全换为u32就好了。

感谢,我再试试
回复

使用道具 举报

5#
ID:192020 发表于 2024-5-13 16:01 | 只看该作者

确实是这样,学艺不精了。之前AD转换平均运算也没发现这问题,到这里才发现问题
回复

使用道具 举报

6#
ID:879809 发表于 2024-5-16 22:50 | 只看该作者
完全没必要移位,太浪费时间了。
u32 i;
u16 *p=&i;
*p=0x5555;
++p;
*p=0xaaaa;

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表