`
aigo
  • 浏览: 2674897 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

移位实现的乘除法

 
阅读更多

 

移位实现的乘除法比直接乘除的效率高很多。

用移位实现乘除法运算 

  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,所以这点要注意

分享到:
评论

相关推荐

    移位实现乘除法运算

    ### 移位实现乘除法运算 在计算机科学与电子工程领域,移位操作是一种高效且基础的运算方式,尤其在处理二进制数据时,它能够替代传统的乘法和除法运算,从而提高计算效率并减少硬件资源的消耗。本文将深入探讨如何...

    DSP的代码优化求余运算,用移位实现乘除法运算,延时函数

    移位实现乘除法运算 移位操作是DSP编程中的一种非常重要的优化技术。通过使用移位操作,可以将乘法和除法运算替换为移位运算,从而提高代码的执行速度。例如,原来的代码 `a = a * 4;` 可以改为 `a = a ;`,原来的...

    FPGA中乘除法的逼近算法.doc

    该算法基于对乘数的逼近,通过将乘数分解成多个部分,然后使用移位运算和加法运算来实现乘除法运算。 该算法的基本思想是将乘数分解成多个部分,然后使用移位运算和加法运算来实现乘除法运算。例如,对于乘数 R,...

    计算机组成原理课程设计(利用COP2000设计新的指令系统并实现乘除法)

    此外,可能还需要设计专门的硬件电路,如ALU(算术逻辑单元)的扩展,以支持乘除法操作。 在实际的课程设计中,你将编写和调试这些微代码,同时编写相关的汇编程序,以便测试新指令的正确性和效率。这将涉及到对COP...

    有限域乘除法研究与实现.zip

    理解有限域乘除法的理论和实现对于设计高效、可靠的通信系统和数据存储解决方案至关重要。例如,它们在无线通信中的信道编码、数字签名和加密算法中都有应用。因此,深入学习和掌握这部分内容对于IT专业人士来说是...

    组成原理课程设计 用COP2000实验仪实现乘除法 东大版

    本课程设计的主题是“用COP2000实验仪实现乘除法”,这是针对计算机体系结构中算术逻辑单元(ALU)部分的具体实践。COP2000实验仪是一款广泛用于教学的数字逻辑实验设备,通过它,学生可以亲手构建和测试简单的...

    移位除法的实现与原理.pdf

    ### 移位除法的实现与原理 #### 1. 概述 移位除法是一种在计算机硬件中实现整数除法的有效方法,尤其适用于那些没有专门除法指令的处理器架构。它通过一系列简单的左移操作和比较来逐步得出商和余数。 #### 2. ...

    C语言移位实现加减乘除

    ### C语言移位实现加减乘除 #### 概述 在计算机科学中,移位操作是一种高效且基本的操作方式,常被用于替代传统的算术运算。本文将深入探讨如何利用C语言中的移位操作来实现加减乘除四种基本运算,并通过具体的...

    C代码的性能优化方案

    - 用移位实现乘除法运算:移位运算通常比乘除法更快。 - 避免不必要的整数除法:除法运算通常很慢,能避免则避免。 - 使用增量和减量操作符:如`i++`和`i--`通常比`i = i + 1`和`i = i - 1`更快。 - 使用复合...

    C语言程序运行速度优化方法谈.pdf

    用移位实现乘除法运算 对于乘除法运算,尤其是乘除以2的幂的情况,可以使用位移操作来替代传统运算。例如,`a 和 `b &gt;&gt; 2` 分别对应于 `a * 4` 和 `b / 4`,并且执行效率更高。 ##### 5. 避免不必要的整数除法 ...

    c++代码优化.pdf

    - **用移位实现乘除法运算**:左移位操作`相当于乘以2,右移位操作`&gt;&gt;`相当于除以2,这通常比乘法和除法更快。 - **避免不必要的整数除法**:整数除法往往比其他运算慢,可以通过乘法和移位来替代。 - **使用增量...

    C代码优化的各种方法

    - **用移位实现乘除法运算**:左移位相当于乘以2,右移位相当于除以2,这种方式通常比直接的乘除法更快。 - **避免不必要的整数除法**:整数除法通常比其他算术运算慢,可以尝试转换为乘法或其他方式。 - **使用...

    C语言代码优化的各个要素和方法

    4. **用移位实现乘除法运算**:在大多数情况下,乘以或除以2的幂次方可以通过位移操作来实现,这种操作通常比传统的乘除法运算更加高效。 **示例**: ```c a = a ; // 相当于 a = a * 4 b = b &gt;&gt; 2; // 相当...

    DSP程序优化方法.pdf

    4. **用移位实现乘除法运算**:在进行乘以或除以2的幂的操作时,可以使用位移操作来替代传统的乘除法。这种方法不仅减少了代码量,还提高了程序的执行效率。 5. **避免不必要的整数除法**:整数除法在所有整数运算...

    DSP程序优化方法借鉴.pdf

    (4)移位实现乘除法运算:a=a*4; b=b/4; 可以改为:a=a; b=b&gt;&gt;2; 通常如果需要乘以或除以 2n,都可以用移位的方法代替。在 ICCAVR 中,如果乘以 2n,都可以生成左移的代码,而乘以其他的整数或除以任何数,均调用...

    面向过程的代码优化技术

    - **用移位实现乘除法运算**:乘法可以通过左移操作实现,除法可以通过右移操作实现,对于2的幂次方的除法尤其有效。 - **避免不必要的整数除法**:整数除法通常比其他运算慢,若能通过其他方式避免,应尽量避免。 -...

    c代码优化方案

    4. **用移位实现乘除法**:乘除2的幂次方可以通过位移操作实现,这不仅代码简洁,而且执行速度更快。 ```c a = a ; // 相当于 a = a * 4; b = b &gt;&gt; 2; // 相当于 b = b / 4; ``` 5. **避免不必要的整数除法**...

    非常通用的c语言程序优化方案

    4. **用移位实现乘除法运算** - 移位运算可以用来替代乘法或除法,尤其是当乘除因子为2的幂时。例如,`a 相当于`a * 4`,而`b &gt;&gt; 2`相当于`b / 4`。 5. **避免不必要的整数除法** - 整数除法通常是所有整数运算中...

    计算机组成原理课程设计乘除法运算.docx

    《计算机组成原理课程设计:乘除法运算》 计算机组成原理是计算机科学的基础课程,它涉及到计算机硬件系统的各个组成部分,包括处理器、内存、输入输出设备等。课程设计是理论学习的重要补充,旨在通过实际操作加深...

    C语言二进制除法用左右移位来表示.txt

    ### 一、基本原理:二进制位移表示乘除法 #### 1. 位移操作的基本概念 在二进制运算中,左移和右移操作是非常重要的基础。左移操作(`)是指将二进制数的所有位向左移动指定的位数,而空出的位置用0填充;右移操作...

Global site tag (gtag.js) - Google Analytics