位操作实现加减乘除四则运算

//利用位运算实现加法
//1.不考虑进位的按位求和,(0,0)(1,1)得0,(1,0)(0,1)得1,使用异或操作可满足要求
//2.只考虑进位,只有(1,1)才会产生进位,使用按位与可以满足要求。当前位产生进位时,要参与高一
		//位的运算,因此按位与后要向左移动一位
		//递归求和,直到进位为0
		int add(int a,int b)
		{
			int carry, add;
			do{
				add = a^b;
				carry = (a&b) << 1;
				a = add;
				b = carry;
			}
			while (carry != 0)
			{
				return add;
			}
//减法实现
			减法容易转化为加法
				a - b = a + (-b) = a + (~b+1)
				int subtract(int a, int b)
			{
				return add(a, add(~b, 1))
			}

			//利用位运算实现乘法
			//正数的乘法
			int multiply(int a, int b)
			{
				int ans = 0;
				while (b)
				{
					if (b & 1)
						ans = add(ans, a);
					a << 1;
					b >> 1;
				}
				return ans;
			}
			//除法实现
			int divide(int a, int b)
			{
				int count = 0;
				while (a >= b)
				{
					a = subtract(a, b);
					count = add(count, 1);
				}
				return count;
			}
			//改进的除法
			int div(const int x, const int y)
			{
				int left_num = x;
				int result = 0;
				while (left_num = x)
				{
					int multi = 1;
					while (y*multi <= left_num >> 1)
					{
						multi = multi << 1;
					}
					result += multi;
					left_num = y*multi;
				}
				return result;
			}

猜你喜欢

转载自blog.csdn.net/jingeche/article/details/81167825