51单片机乘法运算溢出c语言

51单片机c语言计算两个unsigned int型数据的乘积结果髙两位溢出丢失(乘积的数据类型是unsigned long)

你把其中一个变量先放进 长整形变量中(数据类型是unsigned long), 就不会出现结果是整形了

51单片机乘法运算溢出c语言

mcs51系列单片机在进行乘除法运算时如何判断结果是否溢出?

乘法时不存在溢出,因其积是放在两个寄存器当中,8位乘8位,积不超过16位。

51单片机的溢出问题

一个字节只有8位,最大数是1111 1111,+0时不会产生溢出,所以标志位OV=0,当最高位的运算产生进位或借位时OV=1,在编程时,当加法或减法时,并不确定所得的结果是什么,每次需要检查OV位的值用相应的程序去处理有借位和进位的不同情况。如单字节运算中,寄存器中已是1111 1111,加立即值1结果还放在寄存器中,则寄存器中的值加法后变为0000 0000,但OV被置位=1,此时只要检查OV值,如果为1就将另一个寄存器中的值+1,如果这个寄存顺加后OV值又成为1则再另个寄存器中加1,按照所用的字节数,不断检查,就可以进行多个字节的加法运算。简单单片机的指令最多给出4个字节的加法运算指令,但可以用这种方法扩展为20个字节的加法运算,甚至更多,条件是片内的RAM够用。

C语言乘法计算溢出

(1)先做除法在做乘法,

(2)扩大定义范围如double

double a,b,c;

c=a*b/100.0;

a*b是超过4294967295的,但是a*b/100是绝对不超过4294967295

所以先做除法在做乘法就行了a/100*b,你可以定义成double类型

double 和 float 的区别是double精度高,有效数字16位

double a,b,c;c=a*b/100.0;

单片机中乘法指令溢出

请注意

在51中,乘法指令MUL

AB

是这样子的

将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器

说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0

这里的溢出是对8位数来说的,

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月27日 23:33:49
下一篇 2024年3月27日 23:39:00

相关推荐

  • c语言禁忌算法,c语言j

    地图着色问题C/C++ 用邻接矩阵吧。只需要4种颜色。n——顶点总数,m为着色数4,x[n]表示0或1,即是否用某种颜色,g[][]为邻接矩阵。 从一个省开始,给它涂上任意一种颜色1,遍历它旁边的省份,涂上与已经涂色并于他相邻的省份不同的颜色就行了。理论上4种颜色就够了.地图的四色问题嘛!可能会有多组解。用递归(dfs)就可以输出所有解了。 地图着色可以使用…

    2024年5月19日
    3600
  • c语言中unicode,C语言中八进制数使用0x开始

    c语言编程关于L“”,Unicode和多字节字符集,该如何填写 在ANSI/ISO 9899–1990也就是美国国家为程序设计语言C指定的标准(也称为ANSI C)中是这样定义的:用多个字节来代表的字符称之为宽字符,而Unicode只是宽字符编码的一种实现,宽字符并不一定是Unicode。 VC6中使用的是多字符集,而VS2008默认是Unico…

    2024年5月19日
    4200
  • c语言集合赋值,c++集合的使用

    C语言,结构体中的数组怎么赋值,? printf(%d,%s\n,bao.id,bao.name);//输出是4224528,空(应该是null)//structstudentsbao={3,123};可以。 按字符赋值。如结构体变量为a, 成员为字符数组s[10]; 那么可以 for(i = 0; i 10; i ++)a.s[i] = xxx;xxx可以…

    2024年5月19日
    4100
  • c语言基于8051,C语言基于mac地址

    用8051单片机做温度采集与显示(LED数码管)请问用C语言怎么写。给个… 1、这个电路很简单,我说一下就可以了。数字式温度传感器用最常用的DS18B20,它只有3个管脚,一个接电源,一个接地,另一个接8051单片机就可以了。温度值用数码管显示。这样整个电路就接好了。 2、文件名 :温度采集DS18Bc 描述 :该文件实现了用温度传感器件DS18…

    2024年5月19日
    3700
  • c语言二维数组当参数传递,c 二维数组作为参数

    C语言中如何将二维字符数组作为函数参数引用传递 1、不可能达到目的。因为C语言中没有引用这类型,C++才有。另,C/C++都不支持传递数组,只能传递数组的首元素或行指针,所以即使是C++,也只能传递数组指针的引用,而不可能传递数组的引用,因为数组没有引用。 2、函数原型 type fun (type (name*)[size])\x0d\x0a \x0d\x…

    2024年5月19日
    4200
  • pid例程c语言,pid控制c代码实现

    PID算法的C语言实现 Step 7写的PID控制的FC模块。带_IN与带_OUT的变量,如果前缀是一样的,要求连接同一个变量。 其中PID控制器参数的自动调整是通过智能化调整或自校正、自适应算法来实现。有利用PID控制实现的压力、温度、流量、液位控制器,能实现PID控制功能的可编程控制器(PLC),还有可实现PID控制的PC系统等等。 模块名: PID 描…

    2024年5月19日
    3800
  • 华为机试题c语言,华为机试题库c语言

    华为面试题:怎样判断栈的增长方向 1、向下增长的意思是:从栈申请的内存地址会越来越小,而从堆申请的内存地址会越来越大。 2、第一种伴随着栈往下增长,第二种栈往上增长。为了便于移植内核,内核应该处理这两种情况。除了这两种情况,栈还分为满栈和空栈两种,所以内核必须考虑这几种栈方式。 3、而我们的题目不是这样子的。题目有两个栈,一个是地址增大方向增长,一个地址减小…

    2024年5月19日
    7300
  • c语言课程设计坦克大战,c语言课程设计经典游戏

    求C语言funcode坦克大战代码或者文件 1、sudo apt-get install libsdl2-dev 然后,我们可以开始编写代码了。 2、写一个遍历循环,检察所有碰撞层的矩形,跟每发已发射未消失的子弹做判断,看子弹所在的x,y是否在矩形内,是就return 碰撞矩形的id,这发子弹的遍历结束。 3、坦克的移动通过窗体的keypress事件接受键盘…

    2024年5月19日
    5000
  • c语言怎么打开一个文件并清空,c语言中打开文件

    c语言中有没有清空文件的函数 close(fp),这样文件就清空了。当然,打开方式为a也可以。删除文件用remove(a.txt)函数。 打开Sublime文本,创建一个新的Czhidao文件,然后导入C库,如下所示。接下来,创建C语言的主函数,文件的操作将在主函数中进行,如下图所示。接下来,调用C语言的fopen函数打开文件,如下图所示。 首先我们输入【d…

    2024年5月19日
    3600
  • c语言中12等于多少,c语言中12是什么意思

    在C语言中如果x==12,那么x++,++x,–x,x–分别等于多少? 1、结果为4。因为x–/3的意思是:先进行表达式x/3的运算,然后x再进行自减.因此,x–/3=4;x的值最后为11。 2、由于x=12不大于12,于是x-12 的值0被赋给了y,最后输出的结果就是0。 3、x++就是x=x+++x也是x=…

    2024年5月19日
    4200

发表回复

登录后才能评论



关注微信