位运算实现加减乘除

 
 
  1. int AddWithoutArithmetic(int num1,int num2)    
  2. {    
  3.     if(num2==0) return num1;//没有进位的时候完成运算    
  4.     int sum,carry;    
  5.     sum=num1^num2;//完成第一步没有进位的加法运算    
  6.     carry=(num1&num2)<<1;//完成第二步进位并且左移运算    
  7.     return AddWithoutArithmetic(sum,carry);//进行递归,相加    
  8. }  
 
 
  1. int Add(int a,int b) { b?return Add(a^b,(a&b)<<1):return a; } 


   
   
  1. int MyMinus(int a,int b)    
  2. {    
  3.     for(int i=1;i&&((b&i)==0);i<<=1);    
  4.     for(i<<=1;i;i<<=1) b^=i;    
  5.     return MyAdd(a,b);    
  6. }  


int MyMul(int a,int b) { int ans=0; for(int i=1;i;i<<=1,a<<=1) if(b&i) ans+=a; return ans; }


     
     
  1. int MyDiv(int x,int y)    
  2. {    
  3.     int ans=0;    
  4.     for(int i=31;i>=0;i--)  
  5.     {    
  6.     //比较x是否大于y的(1<<i)次方,避免将x与(y<<i)比较,因为不确定y的(1<<i)次方是否溢出  
  7.         if((x>>i)>=y)           
  8.         {       
  9.             ans+=(1<<i);      
  10.             x-=(y<<i);        
  11.         }       
  12.     }    
  13.     return ans;    




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值