`
aigo
  • 浏览: 2644556 次
  • 性别: 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语言程序运行速度优化方法谈.pdf

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

    如何写出好的单片机C语言代码

    用移位实现乘除法运算a=a*4;b=b/4;可以改为:a=a;b=b&gt;&gt;2; 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

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

Global site tag (gtag.js) - Google Analytics