`

位运算实现加法

阅读更多

http://phper5.com/2009/04/02/%E4%BD%8D%E8%BF%90%E7%AE%97%E5%AE%9E%E7%8E%B0%E5%8A%A0%E6%B3%95.html 用位运算实现加法也就是计算机用二进制进行运算,32位的CPU只能表示32位内的数,这里先用1位数的加法来进行,在不考虑进位的基础上,如下 

1.1 + 1 = 0 

2.1 + 0 = 1 

3.0 + 1 = 1 

4.0 + 0 = 0 

 

很明显这几个表达式可以用位运算的“^”来代替,如下 

1.1 ^ 1 = 0 

2.1 ^ 0 = 1 

3.0 ^ 1 = 1 

4.0 ^ 0 = 0 

这样我们就完成了简单的一位数加法,那么要进行二位的加法,这个方法可行不可行呢?肯定是不行的,矛盾就在于,如何去

获取进位?要获取进位我们可以如下思考: 

1.0 + 0 = 0 

2.1 + 0 = 0 

3.0 + 1 = 0 

4.1 + 1 = 1 

5.//换个角度看就是这样 

6.0 & 0 = 不进位 

7.1 & 0 = 不进位 

8.0 & 1 = 不进位 

9.1 & 1 = 进位 

正好,在位运算中,我们用“<<”表示向左移动一位,也就是“进位”。那么我们就可以得到如下的表达式 

1.//进位可以用如下表示: 

2.(x&y)<<1 

到这里,我们基本上拥有了这样两个表达式 

1.x^y //执行加法 

2.(x&y)<<1 //进位操作 

我们来做个2位数的加法,在不考虑进位的情况下 

1.11+01 = 100 // 本来的算法 

2. 

3.// 用推算的表达式计算 

4.11 ^ 01 = 10 

5. 

6.(11 & 01) << 1 = 10 

7. 

8.//到这里 我们用普通的加法去运算这两个数的时候就可以得到 10 + 10 = 100 

9.//但是我们不需要加法,所以要想别的方法,如果让两个数再按刚才的算法计算一次呢 

10. 

11.10 ^ 10 = 00 

12. 

13.(10 & 10) << 1 = 100 

到这里基本上就得出结论了,其实后面的那个 “00” 已经不用再去计算了,因为第一个表达式就已经算出了结果。 

继续推理可以得出三位数的加法只需重复的计算三次得到第一个表达式的值就是计算出来的结果。 

 

c代码如下: 

int Add(int a,int b)
{
 int jw=a&b;
 int jg=a^b;
 while(jw)
 {
 int t_a=jg;
 int t_b=jw<<1;
 jw=t_a&t_b;
 jg=t_a^t_b;
 }
 return jg;
}
 

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/koala_bupt/archive/2009/07/26/4381803.aspx

分享到:
评论

相关推荐

    易语言位运算实现加法运算

    本篇文章将深入探讨如何在易语言中通过位运算实现加法功能。 首先,让我们了解易语言的基本语法。易语言是一种中文编程语言,它的设计目标是使编程变得更加简单,易于理解和学习。在易语言中,我们使用关键字和函数...

    易语言位运算实现加法运算源码

    本篇将深入探讨易语言中如何利用位运算实现加法运算。 一、位运算简介 位运算是对数据的二进制表示进行操作,包括按位与(&)、按位或(|)、按位异或(^)、按位非(~)、左移()和右移(&gt;&gt;)等操作。这些运算符在处理二进制...

    易语言源码易语言位运算实现加法运算源码.rar

    在“易语言源码易语言位运算实现加法运算源码.rar”这个压缩包中,包含的是一段用易语言编写的源代码,主要实现了利用位运算进行加法计算的功能。位运算在计算机科学中是基础且重要的概念,它涉及到二进制级别的数据...

    c语言中用位运算实现加法技巧介绍

    在C语言中,位运算是一种高效的操作方式...位运算实现加法不仅可以提高效率,而且有助于深入理解计算机内部的计算过程。熟练掌握位运算技巧对于编写高效的C语言程序至关重要,特别是在处理大规模数据或低级编程任务时。

    易语言位运算实现加法运算源码-易语言

    总之,易语言位运算实现加法运算源码提供了一个实践位运算的好例子,适合想要提升编程技能,尤其是对位运算感兴趣的开发者。通过学习和研究这段源码,不仅能掌握位运算的原理,还能提升在低级别数据处理方面的编程...

    神经网络实现加法运算.zip

    神经网络实现加法运算神经网络实现加法运算神经网络实现加法运算神经网络实现加法运算神经网络实现加法运算神经网络实现加法运算神经网络实现加法运算神经网络实现加法运算神经网络实现加法运算神经网络实现加法运算...

    实现加法运算实现加法运算

    实现加法运算实现加法运算实现加法运算实现加法运算

    js代码-位运算实现加减乘除

    位运算实现加法的关键在于模2加法器,也称为二进制加法器。在JavaScript中,可以使用异或(^)和按位与(&)运算符来模拟这个过程。异或用于处理进位,而按位与则用于检查是否产生进位。以下是一个简单的实现: ```...

    logisim实验MIPS运算器(ALU)设计(内含4位先行进位74182、四位快速加法器、32位快速加法器)-Educoder_logisim里面连线,实现4位先行进位74182和4位快速加法器-C

    logisim实验MIPS运算器(ALU)设计(内含4位先行进位74182、四位快速加法器、32位快速加法器)-Educoder_logisim里面连线,实现4位先行进位74182和4位快速加法器-C

    mfc 实现加法运算

    在这个“mfc 实现加法运算”的案例中,我们可能会创建一个对话框类,用于显示输入框和按钮,让用户输入两个数字并执行加法运算。 1. **创建MFC对话框项目** - 在Visual Studio中,选择“文件”-&gt;“新建”-&gt;“项目...

    实现进行加法运算

    实现进行加法运算,输入的数字存到数组里面,然后进行加法运算

    大数的幂运算和幂模运算(加法链和蒙哥马利算法的混合)

    本主题聚焦于大数的幂运算和幂模运算的优化,通过结合加法链和蒙哥马利算法来提升计算效率。下面将详细阐述这两种算法以及它们如何在大数运算中发挥作用。 首先,让我们了解一下什么是大数。大数是指超过普通计算机...

    java图形化用户界面实现加法运算

    利用java完成图形化用户界面实现加法运算,第一个加第二个当点击等号时在第三个文本框中显示相加之和

    8位串行加法器

    "8位串行加法器" ...本文介绍了使用一位二进制全加器设计的8位串行二进制全加器的知识点,包括加法器的基本概念、一位二进制全加器、8位串行二进制全加器的设计、VHDL 语言实现、半加器和或门电路的实现等内容。

    32位超前进位加法器(Verilog)

    在数字逻辑设计中,加法器是至关重要的组成部分,它实现了二进制数的加法运算。本项目涉及的是32位超前进位加法器的设计,使用Verilog硬件描述语言(HDL)进行实现。Verilog是一种广泛使用的用于描述数字系统硬件的...

    32位进位选择加法器

    32位进位选择加法器是一种用于数字逻辑设计中的电路结构,主要目的是高效地执行32位二进制数的加法运算。在计算机体系结构中,这种加法器是构建算术逻辑单元(ALU)的关键部分,用于执行基本的算术操作。以下是对该...

    两位数加法运算

    心理学常用软件E-prime,在设计两位数加法运算中的简单举例。

    由4008组成的4位超前进位加法器电路+Proteus仿真

    在这个电路中,4008芯片通常被用作基本的逻辑门单元,以实现加法器的功能。4008芯片是一个CMOS四2输入与非门,是数字逻辑电路的基础组件之一,可以组合成各种逻辑函数,包括AND、NAND、OR、NOT等。 4位超前进位加法...

    计算机加法运算原理计算机加法运算原理

    最终,最高位的进位信号成为整个加法运算的结果的一部分。 在微处理器设计中,加法器通常是算术逻辑单元(ALU)的一部分,ALU负责执行基本的算术和逻辑运算。当CPU执行加法指令时,它会将操作数加载到寄存器中,...

Global site tag (gtag.js) - Google Analytics