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
用移位、异或、与运算实现加法的原理解释:
二、计算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
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时,返回结果
}
四、效果