`
网络接口
  • 浏览: 44934 次
文章分类
社区版块
存档分类
最新评论

简单的C语言移位计算整形乘法和除法值

 
阅读更多

首先要提一点,在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做减法的最后结果中。

注:要做大整数除法其实也是类似的思想,只不过操作的基本元素-位换成了内存单元了。

 

今天要说的基本就是这些了,希望对大家有用。

分享到:
评论

相关推荐

    北京交通大学数电实验报告(最终版).docx

    - **可控乘/除法**:4位移位寄存器可以实现数据的左移和右移,通过控制移位次数,可以实现乘以2^n的计算,相当于数据的二进制位移。对于除法,可以通过多次左移和减法操作来实现。 5. **模数转换**: - **ADC和...

    数字电子技术基础 第五版 阎石 王红 答案

    1. **数字系统基础**:这部分介绍了二进制数制、十六进制数制和八进制数制的转换,以及二进制算术运算,包括加法、减法、乘法和除法。同时,还涉及了二进制补码表示和浮点表示的概念,这对于理解计算机内部的数据...

    数字电子技术基础课件 第五版

    课程中会详细解释二进制数的运算规则,如加法、减法、乘法和除法,以及如何将二进制转换为十进制、八进制和十六进制。 逻辑门是数字电路的基本单元,包括与门、或门、非门、异或门等。这些逻辑门的组合可以构建出...

    四川电大数字电子电路形考三-2022标准答案共3页.p

    1. **数字系统基础**:了解二进制数系及其运算规则,包括加法、减法、乘法和除法。此外,还要熟悉十六进制和八进制与二进制之间的转换。 2. **逻辑门电路**:包括AND、OR、NOT、NAND、NOR、XOR等基本逻辑门的符号、...

    数字电子技术基础课件.rar

    在本课件中,你将学习到如何进行二进制加法、减法、乘法和除法,以及二进制与十进制、十六进制之间的转换。 二、逻辑门电路 逻辑门是数字电路的基本构建单元,包括AND(与)、OR(或)、NOT(非)、NAND(与非)、...

    《数字电子技术基础》数字电路课件[PPT] .阎石著

    1. **数字系统基础**:首先,课程可能会介绍数字系统的基本概念,如二进制数制、八进制、十六进制与十进制之间的转换,以及二进制运算规则(加法、减法、乘法和除法)。 2. **逻辑门电路**:数字电路的核心是逻辑门...

    《数字电子技术基础》(阎石)第五版

    二进制运算包括加法、减法、乘法和除法,这些基本运算是数字电路设计中的基石。 继而,我们会学习逻辑门,如与门、或门、非门、异或门等,它们是数字电路的最基本元素。通过组合不同的逻辑门,可以实现复杂的逻辑...

    数字逻辑电路实验及设计

    通过学习二进制运算,如加法、减法、乘法和除法,读者可以更好地理解数字电路如何进行数据计算。 其次,逻辑门是数字电路的基本元件,包括AND、OR、NOT、NAND、NOR、XOR等类型。这些门电路在实际电路中实现了布尔...

    数字电路课件(清华大学)

    基础概念包括数字信号、位(bit)、字(word)、数据宽度以及数字系统的基本运算,如加法、减法、乘法和除法。 二、逻辑门电路 数字电路的基础单元是逻辑门,包括AND(与)、OR(或)、NOT(非)、NAND(与非)、...

    数字电路复习题(含答案).doc

    同时,数字电路中的运算还包括乘法、除法以及逻辑运算,如AND(与)、OR(或)、NOT(非)、XOR(异或)等。在题目中还提到了触发器,这是构成时序逻辑电路的基本元素,它们能存储信息并根据输入的变化改变输出状态...

    脉冲与数字电路 使你学习数字逻辑变得更轻松

    在数字逻辑这一部分,我们将探讨二进制数系统的基础,包括二进制加法、减法、乘法和除法,以及二进制与十进制、十六进制之间的转换。此外,还会涉及逻辑运算符,如与(AND)、或(OR)、非(NOT)、异或(XOR),...

    数字电路闫石版课件

    二进制数的运算包括加法、减法、乘法和除法等。 3. 组合逻辑电路:由多个逻辑门组合而成,其输出只取决于当前的输入,没有记忆功能。 三、数字电路基础 1. 基本逻辑门电路:介绍各种基本逻辑门的工作原理和特性,...

    基于查阶跃响应表的高效FIR滤波器设计及其FPGA实现.pdf

    每一个输出值y(n)的计算需要N次乘法和N-1次加法操作,这直接导致了需要大量的乘法器和加法器资源,随着滤波器阶数N的增加,占用的硬件资源也越来越多。 ### FIR滤波器的传统设计与问题 传统的FIR滤波器设计采用乘...

    数字电子技术模拟资料

    在数字电子技术中,我们学习如何进行二进制运算,包括加法、减法、乘法和除法,以及二进制与十进制、十六进制等之间的转换。 二、逻辑门电路 逻辑门是数字电子技术的基础元件,包括与门、或门、非门、与非门、或...

    数字电子技术基础习题解答(第五版)

    了解二进制数的运算规则,如加法、减法、乘法和除法,是理解和设计数字系统的基础。此外,书中还会详细讲解逻辑代数,包括基本的逻辑运算符——与、或、非,以及异或,这些是分析和设计数字电路的数学工具。 逻辑门...

    电子技术基础 数字部分 第五版 阎石

    书中详细介绍了二进制数、八进制数和十六进制数的转换,以及二进制运算规则,包括加法、减法、乘法和除法。这些知识是理解和分析数字电路的前提。 接下来,书中详细讲解了逻辑门电路,包括最基本的与门、或门、非门...

    数字逻辑电路ppt及练习题

    9. **模运算器**:介绍模乘法器、模除法器的实现。 10. **脉冲产生与整形**:讲解多谐振荡器、单稳态触发器和施密特触发器的工作原理。 11. **存储器**:涵盖RAM(随机访问存储器)和ROM(只读存储器)的结构和...

    单片机-高清电视音频解码的定点DSP 实现.zip

    - **算法调整**:针对定点运算的特点,对算法进行调整,例如使用移位运算代替除法,乘法替换为移位和加法。 - **流水线设计**:通过设计高效的指令流水线,提高处理速度,减少延迟。 - **硬件加速器**:对于计算...

Global site tag (gtag.js) - Google Analytics