欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言 用移位、异或、与运算实现加法

程序员文章站 2024-03-22 13:39:16
...

C语言 用移位、异或、与运算实现加法

一、说明

 

        计算机整数的加减乘除就是依靠位运算实现的。

比如整数的运算:加法:通过异或、与、移位实现;减法:a-b其实就是a+(-b);乘法:5*3其实就是5+5+5;除法:7/2其实就是

用7不断减2,看看能够减几次,整数运算中,7/2结果为3。

 

    异或xor:不同为1,相同为0。比如:

 

        00001010
   xor  00001001
----------------
        00000011

    与&:同时为1结果是1,否则为0。比如:

 
       00001010
    &  00001001
----------------
       00001000

    用移位、异或、与运算实现加法的原理解释:

C语言 用移位、异或、与运算实现加法

二、计算2+3=?

    1、用a存放2,b存放3

         a:00000010

         b:00000011

    2、计算a xor b 的值,并将结果存到c

    00000010
xor 00000011
------------
    00000001
c的值为:00000001

    3、计算a & b的值,并将结果左移1位后存到b

    00000010
 &  00000011
------------
    00000010

00000010<<1值为00000100
将00000100存到b
b的值为:00000100

 

    4、若b的值为0,c就是结果,若不为0,将c的值赋给a并重复步骤2、3;直至b为0。

 

         a值:00000001

         b值:00000100

    00000001
xor 00000100
------------
    00000101
c的值为:00000101

    00000001
 &  00000100
------------
    00000000
00000000<<1值为00000000
将00000000存到b
b的值为:00000000

 

 

b值为0,c值00000101就是结果,那么2+3=5    (00000101就是二进制的5)

 

 

三、源文件

         plus.c文件

#include <stdio.h>
int Plus(int a,int b);//函数声明 

int main(int argc, char *argv[])
{
	int a = 2;
	int b = 3;
	
	printf("2+3=%d\n",Plus(a,b));
	return 0;
}

int Plus(int a,int b)
{
	int c = a^b;//^异或
	b = (a&b)<<1;//与运算、左移1位 
	while(b)//当b不为0时重复执行 
	{
		a = c;
		c = a^b;
		b = (a&b)<<1; 
	}
	return c;//当b=0时,返回结果 
}

 

四、效果

 

C语言 用移位、异或、与运算实现加法