使用 & ^ << 等 位符实现加法运算

学习过C语言的同学都知道,再写代码的时候,位操作运算总比算数运算操作快,

本文就是用C语言提供的位运算实现两个数的加法。

本文使用的代码都经过调试正常并且能够运行,调试环境centos     gcc  一下是实现代码,以及测试结果:


#include<stdio.h>
#include<stdlib.h>
int main(int argc, char **argv)
{  
  int add_a,add_b;
  int sum;
  if(3!=argc)
  printf("usage : bin_add , (#add_1)  (#add_d)\n");
  else
  {
   add_a= atoi(argv[1]);
   add_b= atoi(argv[2]);
   sum =add(add_a,add_b);
   printf("(%d)+(%d)=%d\n",add_a,add_b,sum);
   }
  return 0; 
} 

int add(int temp_a,int temp_b)
{
    int temp_c=0;
    int temp_d=0;
     temp_c=temp_a & temp_b; //求进位
     temp_d=temp_a ^ temp_b; //求本位和
    while(temp_c)
     {
     temp_c<<=1;
     temp_b=temp_c;
     temp_a=temp_d;
     temp_c=temp_a & temp_b;
     temp_d=temp_a ^ temp_b;
     }
     return temp_d;
}

代码测试:

[trageday@trageday Destop]$ gcc -o bin_add test.c
[trageday@trageday Destop]$ ./bin_add  10 789
(10)+(789)=799
[trageday@trageday Destop]$ ./bin_add  1234  4567
(1234)+(4567)=5801
[trageday@trageday Destop]$ ./bin_add  1234  -456
(1234)+(-456)=778
[trageday@trageday Destop]$ ./bin_add  -34  -456
(-34)+(-456)=-490

其实主要就是解决加法过程中分开 “本位和”  和 “进位和” ;一次一次把进位加到自己的位置上就可以了。

使用递归实现加法:

int add_digui(int temp_a,int temp_b)
{
     int temp_sum,carry;
     if(temp_b==0)
            return temp_a;
     temp_sum=temp_a^temp_b;//本位和
     carry  =(temp_a&temp_b)<<1;//进位
     add_digui(temp_sum,carry);     
   
}
还是递归实现的比较简单明了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值