首先要提一点,在SOC系统中,运算速度一般是移位>乘法>除法。
1.乘法。
最简单的A*B,用C语言for循环
for(int i=0;i 这个是最容易想到的,现在用移位来实现,效率要高一点。
例子1.计算A*17
法1:A=A<<4+A;//移位一次相当于*2
法2:模拟二进制乘法手动运算,适合大整数的乘法。
以前写汇编的时候就写过,利用内存单元(1个byte)来存储乘法的一个位值。
与低位相乘,无非得到原数和0.再做一个大整数的加法,自己判断是否进位了。
大家有兴趣自己实现下。
2.除法
最简单的除法实现A/B,也是用一个for循环
for(int i=0;A>0;A-=B) i++;
移位当然只能实现2的倍数的除法了。
例子2.计算A/8
A>>3
那么计算其它的怎么办呢。本文主要是针对整形除法的,假如做浮点数运算,可以考虑如下,将其分子分母进行一定10的倍数的扩大,结果进行些处理就好了。
写了个简单的代码,模仿手动做除法的过程。
struct NUM
{
int result; //保存商的每一次减法结果
int remainder;//最后的余数
};
struct NUM divde(int div_1,int div_2)
{
//just do int type divide,for float, you can extend the remain value
//default div_2 bigger than div_1
int tmp_1=div_1;//keep the high bit
int count_1=0;
int tmp_2=div_2;
struct NUM num;
num.result=0x00;
while((tmp_1=tmp_1<<1)<=tmp_2)
count_1++;//left aligned
tmp_1=tmp_1>>1;//recovery
// printf("%d %d",tmp_1,count_1);
for(;count_1>=0;count_1--)
{
if(tmp_2>=tmp_1){
tmp_2=tmp_2-tmp_1;
tmp_1=tmp_1>>1;//new round
num.result+=(0x01< }//if
else
{
tmp_1>>1;
continue;
}//else if
}//for
num.remainder=tmp_2;
return num;
}
void main()
{
int div_1=0,div_2=0;
struct NUM num;
printf("please input two number to divede(result no less than 1)\n");
scanf("%d %d",&div_1,&div_2);
if(div_1>div_2)
{
div_1=div_1^div_2;
div_2=div_1^div_2;
div_1=div_1^div_2;
}//simple switch
num=divde(div_1,div_2);
printf("\n%d / %d =%d----%d",div_2,div_1,num.result,num.remainder);
}
代码直接从编辑器拷贝来的,转贴来就这样了,代码思路大概这样:1.小一点的数先移位对齐大一点的数,记下对齐移位的次数,
2.然后被除数减去除数,本次的商被记录为num.result+=(0x01< 并且小数右移一位。
3.余数最后存储在tmp_2做减法的最后结果中。
注:要做大整数除法其实也是类似的思想,只不过操作的基本元素-位换成了内存单元了。
今天要说的基本就是这些了,希望对大家有用。
相关推荐
- **可控乘/除法**:4位移位寄存器可以实现数据的左移和右移,通过控制移位次数,可以实现乘以2^n的计算,相当于数据的二进制位移。对于除法,可以通过多次左移和减法操作来实现。 5. **模数转换**: - **ADC和...
1. **数字系统基础**:这部分介绍了二进制数制、十六进制数制和八进制数制的转换,以及二进制算术运算,包括加法、减法、乘法和除法。同时,还涉及了二进制补码表示和浮点表示的概念,这对于理解计算机内部的数据...
课程中会详细解释二进制数的运算规则,如加法、减法、乘法和除法,以及如何将二进制转换为十进制、八进制和十六进制。 逻辑门是数字电路的基本单元,包括与门、或门、非门、异或门等。这些逻辑门的组合可以构建出...
1. **数字系统基础**:了解二进制数系及其运算规则,包括加法、减法、乘法和除法。此外,还要熟悉十六进制和八进制与二进制之间的转换。 2. **逻辑门电路**:包括AND、OR、NOT、NAND、NOR、XOR等基本逻辑门的符号、...
在本课件中,你将学习到如何进行二进制加法、减法、乘法和除法,以及二进制与十进制、十六进制之间的转换。 二、逻辑门电路 逻辑门是数字电路的基本构建单元,包括AND(与)、OR(或)、NOT(非)、NAND(与非)、...
1. **数字系统基础**:首先,课程可能会介绍数字系统的基本概念,如二进制数制、八进制、十六进制与十进制之间的转换,以及二进制运算规则(加法、减法、乘法和除法)。 2. **逻辑门电路**:数字电路的核心是逻辑门...
二进制运算包括加法、减法、乘法和除法,这些基本运算是数字电路设计中的基石。 继而,我们会学习逻辑门,如与门、或门、非门、异或门等,它们是数字电路的最基本元素。通过组合不同的逻辑门,可以实现复杂的逻辑...
通过学习二进制运算,如加法、减法、乘法和除法,读者可以更好地理解数字电路如何进行数据计算。 其次,逻辑门是数字电路的基本元件,包括AND、OR、NOT、NAND、NOR、XOR等类型。这些门电路在实际电路中实现了布尔...
基础概念包括数字信号、位(bit)、字(word)、数据宽度以及数字系统的基本运算,如加法、减法、乘法和除法。 二、逻辑门电路 数字电路的基础单元是逻辑门,包括AND(与)、OR(或)、NOT(非)、NAND(与非)、...
同时,数字电路中的运算还包括乘法、除法以及逻辑运算,如AND(与)、OR(或)、NOT(非)、XOR(异或)等。在题目中还提到了触发器,这是构成时序逻辑电路的基本元素,它们能存储信息并根据输入的变化改变输出状态...
在数字逻辑这一部分,我们将探讨二进制数系统的基础,包括二进制加法、减法、乘法和除法,以及二进制与十进制、十六进制之间的转换。此外,还会涉及逻辑运算符,如与(AND)、或(OR)、非(NOT)、异或(XOR),...
二进制数的运算包括加法、减法、乘法和除法等。 3. 组合逻辑电路:由多个逻辑门组合而成,其输出只取决于当前的输入,没有记忆功能。 三、数字电路基础 1. 基本逻辑门电路:介绍各种基本逻辑门的工作原理和特性,...
每一个输出值y(n)的计算需要N次乘法和N-1次加法操作,这直接导致了需要大量的乘法器和加法器资源,随着滤波器阶数N的增加,占用的硬件资源也越来越多。 ### FIR滤波器的传统设计与问题 传统的FIR滤波器设计采用乘...
在数字电子技术中,我们学习如何进行二进制运算,包括加法、减法、乘法和除法,以及二进制与十进制、十六进制等之间的转换。 二、逻辑门电路 逻辑门是数字电子技术的基础元件,包括与门、或门、非门、与非门、或...
了解二进制数的运算规则,如加法、减法、乘法和除法,是理解和设计数字系统的基础。此外,书中还会详细讲解逻辑代数,包括基本的逻辑运算符——与、或、非,以及异或,这些是分析和设计数字电路的数学工具。 逻辑门...
书中详细介绍了二进制数、八进制数和十六进制数的转换,以及二进制运算规则,包括加法、减法、乘法和除法。这些知识是理解和分析数字电路的前提。 接下来,书中详细讲解了逻辑门电路,包括最基本的与门、或门、非门...
9. **模运算器**:介绍模乘法器、模除法器的实现。 10. **脉冲产生与整形**:讲解多谐振荡器、单稳态触发器和施密特触发器的工作原理。 11. **存储器**:涵盖RAM(随机访问存储器)和ROM(只读存储器)的结构和...
- **算法调整**:针对定点运算的特点,对算法进行调整,例如使用移位运算代替除法,乘法替换为移位和加法。 - **流水线设计**:通过设计高效的指令流水线,提高处理速度,减少延迟。 - **硬件加速器**:对于计算...