您的位置:首页 > 其它

练习:逻辑运算与位运算实现除法运算,加法运算

2014-04-17 22:01 375 查看

逻辑运算与位运算实现除法运算:
   方案一:
   # include <stdio.h>
   
   int MyDiv( int a , int b )
   {
    printf( " a = %d b =%d \n" , a, b);
    int sum = 0;
    int c = b;
    if( b == 0 )
    {
    printf("除数不能为零\n");
    }
    if( a < b )
    {
    return 0;
    }
    for( ; a >= c ; c <<= 1 , sum++)
    {
    if( a - c < b )
    {
    return 1 << sum;
    }
    }
    printf( " sum = %d\n" , sum );
    return MyDiv( a - ( c >> 1 ) , b ) + ( 1 << ( sum - 1 ));
   }
   
   int main( )
   {
    printf("%d\n" , MyDiv( 100 , 3 ));
    return 0;
   }
   
   方案二:
   #include <stdio.h>
   
   int div( const int x , const int y )
   {
    int left = x;
    int result = 0;
    while( left >= 0 )
    {
    int multi = 1;
    while( y * multi <= ( left >> 1 ) )
    {
    multi = multi << 1;
    }
    result += multi;
    left -= y * multi;
    if( left < y )
    {
    break;
    }
    }
    return result;
   }
   
   int main ( )
   {
    printf("%d \n" , div( 100 ,3 ));
    return 0;
   }
   
逻辑运算实现加法运算:
   方法一:
   # include <stdio.h>
   
   int add( int num1 , int num2 )
   {
    if( 0 == num2 )
    {
    return num1 ;
    }
    int sum = num1 ^ num2;
    int carry = ( num1 & num2 ) << 1 ;
    return add( sum , carry );
   }
   
   int main( )
   {
    printf("%d\n" , add( 100 , 20 ) );
    return 0;
   }
   方法二:
   # include<stdio.h>
   
   int add( int num1 , int num2 )
   {
    int sum = 0;
    int left = 0;
    int right = 0;
    while( ( num1 & num2 ) > 0 )
    {
    left = num1 ^ num2;
    right = num1 & num2;
    num1 = left ;
    num2 = right << 1;
    }
    sum = num1 ^num2;
    return sum;
   }
   
   int main( )
   {
    printf("%d\n" ,add( 100 , 20 ));
    return 0;
   }

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: