电子产业一站式赋能平台

PCB联盟网

搜索
查看: 2322|回复: 2
收起左侧

Uint64 右移为什么会被强转成UINT32?

[复制链接]

657

主题

1025

帖子

5598

积分

四级会员

Rank: 4

积分
5598
发表于 2022-11-18 15:40:11 | 显示全部楼层 |阅读模式
fvco=0x12A05F200。
结果算出来是是0x2A05F200。
正好高位抹零了。
这个入参我另外一个函数还用了。正常使用。就是到这里不知道为什么会高位抹零。
隐形强转不应该是uint64比uint32优先级高吗?应该转成uint64啊。
void setrx_Phase_lock_det_ppm (unsigned char idx, unsigned long long fvco,unsigned long long ppm)
{   
unsigned long long pahse_det_th=((fvco>>11)*ppm/(1000000));   
write_a(RX_PHASE_LOCK_UPPER+idx*MCU_PHASE_PLL0_ADDR_OFFSET,4,((fvco>>11)+pahse_det_th));
write_a(RX_PHASE_LOCK_FLOOR+idx*MCU_PHASE_PLL0_ADDR_OFFSET,4,((fvco>>11)-pahse_det_th));
}
回复

使用道具 举报

2851

主题

4614

帖子

2万

积分

官网认证

Rank: 3Rank: 3

积分
25793

活跃会员热心会员推广达人优秀版主

发表于 2022-11-18 15:40:40 | 显示全部楼层
unsigned long long freq = Fvco - 4000000000;
的结果是1000 000 000 是正确的
unsigned long long freq = Fvco >>11;
却是0x540BE(应该是0x2540BE)。是错误的。
为什么同样是u64的数,一个没有强转,一个强转了呢?STM32不支持64位的位移或除法?
回复 支持 反对

使用道具 举报

604

主题

947

帖子

5151

积分

四级会员

Rank: 4

积分
5151
发表于 2022-11-18 15:41:09 | 显示全部楼层
分成两个32位分别计算 。32位的CPU哪里支持 64位的移位计算 ?
回复 支持 反对

使用道具 举报

发表回复

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

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表