逻辑运算与位运算实现除法运算:
方案一:
# 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;
}