最近一直都没写什么文章,随便写点最近看到的东西。首先要提一点,在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)
{