问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

单片机怎么处理32位数据

发布网友 发布时间:2022-05-06 16:53

我来回答

2个回答

热心网友 时间:2023-10-12 16:48

#include <stdio.h>

//fl 第一个64位整数的低32位
//fh 第一个64位整数的高32位
//sl 第二个64位整数的低32位
//sh 第二个64位整数的高32位
//ol 结果值64位整数的低32位指针
//oh 结果值64位整数的高32位指针
void i64mul(__int32 fl, __int32 fh,__int32 sl, __int32 sh, __int32 *ol, __int32 *oh)
{
unsigned __int16 f[4]={fl & 0xFFFF,(unsigned __int32)fl >> 16,fh & 0xFFFF,(unsigned __int32)fh >> 16};
unsigned __int16 s[4]={sl & 0xFFFF,(unsigned __int32)sl >> 16,sh & 0xFFFF,(unsigned __int32)sh >> 16};
unsigned __int16 o[8]={};

int nf=0,ns=0,no;

if(f[3]&0x8000)
{
nf=1;
for (int i=0;i<4;i++)
f[i]=~f[i];
for (int i=0;i<4 && !++f[i];i++)
;
}
if(s[3]&0x8000)
{
ns=1;
for (int i=0;i<4;i++)
s[i]=~s[i];
for (int i=0;i<4 && !++s[i];i++)
;
}
no=nf ^ ns;
for (int i=0;i<4;i++)
{
for (int j=0;j<4;j++)
{
unsigned __int32 t=f[j]*s[i]+o[i+j];
o[i+j]=t & 0xFFFF;
t>>=16;
for (int k=i+j+1;k<8;k++)
{

t=t+o[k];
o[k]= t & 0xFFFF;
t>>=16;
}
}
}
if(no)
{
for (int i=0;i<8 && --o[i]==0xFFFF;i++)
;
for (int i=0;i<4;i++)
o[i]=~o[i];
}
*ol=o[0]+((unsigned __int32)o[1]<<16);
*oh=o[2]+((unsigned __int32)o[3]<<16);
}

int main()
{
/*
你的用法为

计算data32l,data32h乘7
i64mul(data32l,data32h,0,7,&data32l,&data32h);

计算data32l,data32h乘_data32l,_data32h 也就是两个64位数相乘
i64mul(data32l,data32h,_data32l,_data32h,&data32l,&data32h);
*/

//下面是一个在PC机上验证函数正确的样本
__int64 o2=0,o,f,s;
f=-1234899233;
s=1567991233;
o=f*s;

i64mul(f,f>>32,s,s>>32, (__int32*)&o2,(__int32*)&o2+1);

if(o==o2)
{
printf("计算正确\n");
}
f=1234899999233;
s=1567999991233;
o=f*s;

i64mul(f,f>>32,s,s>>32, (__int32*)&o2,(__int32*)&o2+1);

if(o==o2)
{
printf("计算正确\n");
}
}

热心网友 时间:2023-10-12 16:48

把它分成几段分别乘,然后在和起来,大慨是这样
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
红米手机怎么设置仅在wifi下载 映泰A770L3 6.x详细参数 映泰A770L3 6.x重要参数 问心诗集电子书txt全集下载 《第26局世界大学生运动会诗歌集》txt全集下载 自由体诗的欣赏txt全集下载 徐志摩诗全集txt全集下载 站立的近义词有哪些 站立的近义词是什么 小学语文教师工作评价1000字 吉林电气工程学院什么样 老是断发是怎么回事。 头发断发严重的原因 头发很干,很枯黄,并且一拉就断怎么回事?需要怎么治疗? find命令中查找名为变量 linux 怎么讲find到的文件复制到另一个文件夹中 味觉对咸甜辣减弱,只对酸味有反应而且格外的酸,怎么办? 味觉受影响是哪里出了问题吃甜的觉得酸 求歌 歌词里很多句 哎哟怎么办 所以呢 的日文怎么写 日语 所以 按照日语发音的英文拼写 怎么写 ‘所以呢’的日语是? 日语的“所以”有哪几种说法 &quot;所以&quot;在日语里怎么说 所以 日语怎么写 日语&quot;所以&quot;&quot;还有&quot;分别怎么说 所以用日语怎么说 “所以”用日语怎么说? access2010报表中的网格线颜色如何设置,是网格线,不是文本框的边框样式 关于PTE考试的问题,UNSW语言中心开始认可PTE学术英语考试,谁能简单介绍一下这个考试? pearson english考什么内容 STM32单片机怎么产生脉冲信号控制步进电动机? 怎样让32单片机管脚先拉低输出后拉高输出(最好写出程序) 现在我的发质有点干,断发很厉害,也掉头发,请问怎么办呢? MIC5205-3.3BM5 第三个引脚怎么连接单片机MC9S12GN32? 51单片机编程中*是怎么一回事? 求MC9S12GN32 20脚的UART 接受程序,急急急。。。 stm32单片机可以用在三轴雕刻机上当控制芯片吗? 正在制作单片机的交通灯作品,使用到INT0的中断,就是当INT0接到低电平就中断(或者其他的也行,急求代码 怎么看qq是不是靓号啊? access中的字段显示宽度是什么? QQ怎么样才算是靓号 哪里查看qq号是否qq靓号 win10系统登陆微软账户提示执行此操作需要internet怎么办 在宇宙飞船里洗澡必须 当我要删除桌面上无用的文件夹时出现错误提示:只有连接到网络,才能执行此操作! 共享删除 只要连接到网络,才能执行此操作 为什么我在删除internet explorer 时,你需要权限才能执行此操作 宇航员在宇宙飞船里洗澡必须 枸杞炖海参的做法? 枸杞炖海参怎么做?