移位实现的乘除法比直接乘除的效率高很多。
用移位实现乘除法运算
a=a*4;
b=b/4;
可以改为:
a=a<<2;
b=b>>2;
说明:
除2 = 右移1位 乘2 = 左移1位
除4 = 右移2位 乘4 = 左移2位
除8 = 右移3位 乘8 = 左移3位
... ...
通常如果需要乘以或除以2的n次方,都可以用移位的方法代替。
大部分的C编译器,用移位的方法得到代码比调用乘除法子程序生成的代码效率高。
实际上,只要是乘以或除以一个整数,均可以用移位的方法得到结果,如:
a=a*9
分析a*9可以拆分成a*(8+1)即a*8+a*1, 因此可以改为: a=(a<<3)+a
a=a*7
分析a*7可以拆分成a*(8-1)即a*8-a*1, 因此可以改为: a=(a<<3)-a
关于除法读者可以类推, 此略.
一个自己曾经忽视的东西,那就是C/C++中的移位操作容易出错的情况。
1、什么样的数据类型可以直接移位
char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long都可以进行移位操作,而double、float、bool、long double则不可以进行移位操作。
2、有符号数据类型的移位操作
对于char、short、int、long这些有符号的数据类型:
对负数进行左移:符号位始终为1,其他位左移
对正数进行左移:所有位左移,即 <<,可能会变成负数
对负数进行右移:取绝对值,然后右移,再取相反数
对正数进行右移:所有位右移,即 >>
3、无符号数据类型的移位操作
对于unsigned char、unsigned short、unsigned int、unsigned long这些无符号数据类型:
没有特殊要说明的,使用<< 和 >> 操作符就OK了
结束语
8086 中存在逻辑移位、算术移位,而C/C++中的移位似乎既不是逻辑移位,也不是算术移位。
比如-1,我们若对它右移1位,C的结果仍旧是-1,事实上无论右移多少位始终是-1,逻辑移位得到的结果(8位表示)应该是-128,所以这点要注意
相关推荐
移位实现乘除法运算移位实现乘除法运算移位实现乘除法运算
位操作只需一个指令周期即可完成,而大部分的 C 编译器的“ % ”运算均是调用子程序来完成,代码长、执行速度慢。
这个文档有助于学习设计带clk的乘除法。
(4)用移位实现乘除法运算 (5)避免不必要的整数除法 (6)使用增量和减量操作符 (7)使用复合赋值表达式 (8)提取公共的子表达式 4、结构体成员的布局 (1)按数据类型的长度排序 (2)把结构体填充成最长类型...
(4)、用移位实现乘除法运算__ 6 (5)、避免不必要的整数除法__ 8 (6)、使用增量和减量操作符__ 8 (7)、使用复合赋值表达式__ 8 (8)、提取公共的子表达式__ 9 4、结构体成员的布局__ 9 (1)按...
基于Vivado 2020.2下 16bit 32bit 无符号及有符号整数 乘法 除法 加法 减法 及开方的 IP核实现与仿真验证
引入CORDIC 算法到复数的除法运算中, 利用CORDIC 旋转操作来代替乘、加法操作, 然后采用双比特移位操作得到最终运 算结果。经CORDIC 旋转后数据最多只放大2 位位宽, 因此可以减少硬件实现中的器件迭代次数。经过FPGA...
_2C代码优化方案__41、选择合适的算法和数据结构__42、使用尽量小的数据类型__53、减少运算的强度__5(1)、查表(游戏程序员必修课)_5(2)、求余运算__6(3)、平方运算__6(4)、用移位实现乘除法运算__6(5)、...
二、课程设计的任务 针对COP2000实验仪,从详细了解该模型机的指令/微指令系统入手,以实现乘法和除法运算功能为应用目标,在COP2000的集成开发环境下,设计全新的指令系统并编写对应的微程序;之后编写实现乘法和...
在较为复杂的单片机系统中! 为扩大取值范围! 实现复杂的计算和控制! 一般都要涉及浮点数的运 算" 而一般单片机是没有浮点数运算指令的! 必须自 行编制相应软件" 在进行除...的乘除法功能! 很轻易地实现了浮点数的除法
该方法以数值计算中的预估-修正方法为指导,充分利用了16位单片机的乘除法功能,很轻易地实现了浮点数的除法。 1 浮点数格式 IEEE的浮点数标准规定了单精度(4字节)、双精度(8字节)和扩展精度(10字节)三种...
1 绪论 1 ...6大整数除法实现 37 6.1使用减法替换除法运算 37 6.2模拟笔算除法 38 7大整数幂运算实现 43 7.1单数位幂乘 43 7.2 K—RAY幂乘 45 7.3滑动窗口幂乘 45 结论 47 参考文献 48 致谢 49 附录 A 50
2.原码一位乘实现设计 4 4.累加操作实现 5 三.除法模块详细设计 6 1.实现流程图 6 2.原码加减交替法实现过程 7 3.移位操作与累加操作 7 4.求补操作实现 7 四.仿真过程及仿真结果 7 1.乘法仿真截图 7 2.除法仿真...
一、移位运算 二、加法与减法运算 三、软件技术的兴起和发展 四、除法运算 第三节 定点数运算 定点数运算包括移位、加、减、乘、除几种。 一、移位运算 1.移位的意义 移位运算在日常生活中常见。例如 15 米可写作 ...
用C/C++语言实现计算机内部,运算器基本算术运算和逻辑运算,包括:原码一位乘法、补码一位乘法(Booth)、原码加减交替除法、补码加减交替除法、逻辑左右移位、逻辑与、逻辑或、逻辑非、逻辑异或。由控制器从ins_...
在本次大作业中,实现了如下基本算法:加、减、乘、除、移位、幂取模的高精度算法,利用快速幂和牛顿迭代法加速取模运算,中国剩余定理,Miller Rabin 检测。
将乘除法换成移位运算、把四字节的数据类型转化为两字节、使用查表算法代替程序中的 乘法运算、编写自己的代码替代开发环境提供的API函数等方式来提高图像处理算法的运 行效率。从图像灰度化的实验结
详情介绍:https://www.yuque.com/sxbn/ks/100010263 在本次大作业中,实现了如下基本算法: 加、减、乘、除、移位、幂取模的高精度算法 利用快速幂和牛顿迭代法加速取模运算 中国剩余定理 Miller Rabin检测
Java:算法和数据结构 算法和数据结构是用Java实现... 使用除法和加倍 是2的幂 使用循环 使用递归 使用对数 使用位 译成英文(例如1会返回“ 1”) 到二进制字符串 使用除法和模数 使用右移和模数 使用BigDecimal 加成