单片机c语言除法
unsigned long data1;//定义被除数
unsigned long data2;//定义除数
unsigned long data3;//定义结果
data3=data1/data2;//计算结果
B. 单片机中C语言如何实现浮点除法运算
直接除就可以了
比如定义一个整形变量int x;
另一个整形变量int y;
浮点型变量float z;
浮点数除法:
z = (float)x / (float)y
C. 单片机c语言,为什么除数与被除数都是一样的,取余后的结果却是不同的呢
看下uchar的数值范围是多少了,看头文件对uchar的定义,单片机一般就是0-255
D. 单片机C语言rgb_flag=(rgb_flag+1)%6;与if(++rgb_flag>=6)rgb_flag=0
编程计算中,乘除法操作效率远远低于加减法操作。
rgb_flag=(rgb_flag+1)%6,这个有求模操作,实际就是除法操作,所以效率低。
E. 求C语言代码:单片机没有乘除法,如何实现乘除法运算
如果是整数的乘除法还简单,浮点数的就不行了。
整数的乘法很好理解啊,比如A×B,就是A重复累加B次,比如要求C=A×B:
int A,B,C,i;
C=0;
for(i=0;i<B;i++)
{C+=A;}
整数的除法和乘法相反,比如A÷B,那就是让A反复减去B,直到差的数值小于B为止,这时差是余数,减去B的次数就是商,比如计算A÷B=C……D:
int A,B,C,D;
C=0;
while(A>B)
{
C++;
A-=B;
}
D=A;
计算完成之后C就是商,D就是余数。
F. 单片机和C语言有什么关系吗
语法、运算符和变量规则都一样,由于CPU不同,所以库函数都不一样。在普通C中常用的头文件是stdio.h,在单片机(51为例)常用的头文件是reg51.h或reg52.h。单片机面向的是硬件环境更多一些。常用函数printf,普通C中输出到屏幕,单片机中输出到串口。等等,具体的需要自己去挖掘。
G. 求C语言代码:单片机没有乘除法,如何实现乘除法运算
单片机乘除法要用到ACC与B寄存器
所以在中断程序中:
{
ACC++;
,
,
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
最后的两个除法把ACC的值改变了。把变量ACC改为一个其它的全局变量就好了。(比如定义一个全局变量unsigned
char
n;把ACC改为n;)
C语言编程中,变量最好让编译器自己处理,不要直接用某一个寄存器。
H. 关于51单片机C语言除法的问题
需要使用'('和')'来代替'['和']', C语言中用()来确定运算优先级, []是数学中的表达方式.
头文件<math.h>是PC机编译器C/C++里的头文件, 需要确定51编译器中是否有此头文件.
/1024其实就是移位操作, 如果变量u的取值范围足够大, 可以使用移位操作, 即>>10来代替/1024. 像处理器这种东西, 最怕做的是除法, 代价很高, 速度很慢.
另外, 51单片机是8位处理器, double型和float型的取值范围是一样的.
-中国物联网校企联盟技术部
I. 51单片机C语言的“除法”不解
a=w/10; //这个我是不打算做除法的,是求w有多少个10以内的数
----
如果 A >= 10,显然,A 有 10 个10以内的数(0~9)。
如果 A < 10,A 有 A + 1 个10以内的数。
如,A = 7,显然,A 有 8 个10以内的数(0~7)。
J. 51单片机带小数的多字节乘除运算
对于多字节数,估计你不会直接保存成数值而是要保存成字符串了吧,当然如果你保存成数值的话通过连续乘10直到结果为整数的方法计算小数点后的位数,对于小数相乘来说,两个数的小数点位数相加就是结果的小数点位数。数值计算可以全当整数,按大数乘法计算。而除法可以通过同时向后移位小数位到全部都是整数,用大数除法的算法解决。如果存的是数值,直接连续乘10.
附,大数计算,这个是在电脑上编的,不过都是C语言,可以参考,有不懂可以问我。
#include <stdio.h>#include <string.h>
//-----------------------------------------------//将字符串转化为整形数组void str2int(char *a,char *b,int ia[1024],int ib[1024],int ir[1024]){ int i,len; //对数组初始化 for (i=0;i<1024;i++) { ia[i]=0; ib[i]=0; ir[i]=0; } //将a翻转后输入到数组 i=strlen(a); len=strlen(a); while(i) { i--; ia[len-i-1]=*(a+i)-48; } //将b翻转后输入到数组 i=strlen(b); len=strlen(b); while(i) { i--; ib[len-i-1]=*(b+i)-48; }}//-----------------------------------------------//比较大小int cmp(char *a,char *b){ int i,sg; if (strlen(a)>strlen(b)) { sg=0; } else if (strlen(a)<strlen(b)) { sg=1; } else { for (i=0;i<(int)strlen(a);i++) { if (*(a+i)>*(b+i)) { sg=0; break; } else if (*(a+i)<*(b+i)) { sg=1; break; } else sg=0; } } return sg;}//-----------------------------------------------//加法函数char *add(char *a,char *b){ int len,i,c; int ia[1024],ib[1024],ir[1024]; str2int(a,b,ia,ib,ir); if (strlen(a)>strlen(b)) len=strlen(a); else len=strlen(b); c=0; //加法运算 for (i=0;i<len;i++) { ir[i]=(ia[i]+ib[i]+c)%10; c=(ia[i]+ib[i]+c)/10; } if (c==1) { ir[len]=1; len++; } for (i=0;i<len;i++) { *(a+i)=ir[len-i-1]+48;//翻转输出 } *(a+len)='\0'; return a;}//-----------------------------------------------//减法函数char *sub(char *a,char *b){ int len,i,c,sg; int ia[1024],ib[1024],ir[1024]; char str[1024]; char *strrt; str2int(a,b,ia,ib,ir); //符号判断 sg=cmp(a,b); if (sg==0) len=strlen(a); else len=strlen(b); c=0; //减法运算 for (i=0;i<len;i++) { if (sg==0) { if ((ia[i]-ib[i]-c)>=0) { ir[i]=ia[i]-ib[i]-c; c=0; } else { ir[i]=10+ia[i]-ib[i]-c; c=1; } } else { if ((ib[i]-ia[i]-c)>=0) { ir[i]=ib[i]-ia[i]-c; c=0; } else { ir[i]=10+ib[i]-ia[i]-c; c=1; } } } if (sg==1) str[0]='-'; for (i=0;i<len;i++) { str[i+sg]=ir[len-i-1]+48;//翻转输出 } str[len+sg]='\0'; strrt=str; //去零处理 if (sg==0) { while(len>1&&*strrt=='0') { strrt++; len--; } } if (sg==1) { strrt++; while(len>1&&*strrt=='0') { *strrt='-'; strrt++; len--; } strrt--; } strcpy(a,strrt); return a;}
//-----------------------------------------------//乘法函数char *mul(char *a,char *b){ int len,lena,lenb,i,j,c,jin; int ma[1024],mb[1024],mr[1024]; char stra[1024],strb[1024]; char *strrta,*strrtb; stra[0]='0'; stra[1]='\0'; strrta=stra; str2int(a,b,ma,mb,mr); //乘法运算 lena=strlen(a); lenb=strlen(b); for (j=0;j<lena;j++) { c=0; jin=0; for (i=0;i<lenb;i++) { mr[i]=(ma[j]*mb[i]+c)%10; c=(ma[j]*mb[i]+c)/10; } len=lenb; if (c>0) { strb[0]=c+48; jin=1; } for (i=0;i<len;i++) { strb[i+jin]=mr[len-i-1]+48; } for (i=len;i<len+j;i++) strb[i+jin]='0'; strb[len+j+jin]='\0'; strrtb=strb; add(strrta,strrtb); } strcpy(a,strrta); return a;}//--------------------------------------------------//除法函数char *div(char *a,char *b){ int len,lena,i,j; char stra[1024],strb[1024],strc[1024],strd[1024]; char *strbp; strbp=strc; strcpy(stra,a); strcpy(strb,b); strcpy(strd,a); if (cmp(stra,strb)==1) { //被除数小于除数 *a='0'; *(a+1)='\0'; strcpy(b,stra); } else { //被除数大于除数 mul(strb,"10"); len=strlen(a)-strlen(b); if (len==0||(len==1&&cmp(stra,strb)==1)) { strcpy(stra,a); strcpy(strb,b); i=1; strc[0]='1'; strc[1]='\0'; while(cmp(stra,strc)==0) { strc[0]=i+48; strc[1]='\0'; mul(strc,strb); i++; } *a=i+46; *(a+1)='\0'; strcpy(strc,a); mul(strc,strb); sub(stra,strc); strcpy(b,stra); } else { len=strlen(a)-strlen(b); for (j=0;j<=len;j++) { for (i=0;i<=(int)strlen(b);i++) { if ((i+j-1)<0) stra[i]='0'; else stra[i]=*(a+i+j-1); } stra[strlen(b)+1]='\0'; strcpy(strb,b); strbp=stra; lena=strlen(strbp); while(lena>1&&*strbp=='0') { strbp++; lena--; } div(strbp,strb); strc[j]=*strbp; strbp=strb; for (i=0;i<(int)(strlen(b)-strlen(strb));i++) { strbp--; *strbp='0'; } for (i=strlen(b)-1;i>=0;i--) { *(a+i+j)=*(strbp+i); } } strc[len+1]='\0'; strbp=strc; lena=strlen(strbp); while(lena>1&&*strbp=='0') { strbp++; lena--; } strcpy(a,strbp); mul(strbp,b); sub(strd,strbp); strcpy(b,strd); } } return a;}
void main(){ char a[1024],b[1024],c; c='0'; while(c!='q') { printf(">>请输入命令\n>>+ 加\n>>- 减\n>>* 乘\n>>/ 除\n>>q 退出\n>>"); c=getchar(); getchar(); switch(c) { case 'q':break; case '+': printf(">>请输入第一个加数\n>>"); gets(a); printf(">>请输入第二个加数\n>>"); gets(b); printf(">>和为%s",add(a,b)); getchar(); break; case '-': printf(">>请输入被减数\n>>"); gets(a); printf(">>请输入减数\n>>"); gets(b); printf(">>差为%s",sub(a,b)); getchar(); break; case '*': printf(">>请输入第一个乘数\n>>"); gets(a); printf(">>请输入第二个乘数\n>>"); gets(b); printf(">>积为%s",mul(a,b)); getchar(); break; case '/': printf(">>请输入被除数\n>>"); gets(a); printf(">>请输入除数\n>>"); gets(b); div(a,b); printf(">>商为%s余数为%s",a,b); getchar(); break; default:break; } }}