位运算实现加减乘除

本文介绍了一种使用位运算实现加、减、乘、除四则运算的方法,通过具体的C#代码示例,详细解释了如何利用位运算符进行高效计算。包括加法、减法、乘法和除法的具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章
用基本位运算实现加减乘除

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;



namespace BseOperate
{
    class Program
    {

        //加减乘除运算
        static void Main(string[] args)
        {
            Console.WriteLine("1+3 = "+Add(1, 3)) ;
            Console.WriteLine("1+(-3) = " + Add(1, -3));
            Console.WriteLine("1-3 = " + Subtraction(1, 3));
            Console.WriteLine("1-(-3) = " + Subtraction(1, -3));
            Console.WriteLine("5*3 = " + Multiply(5, 3));
            Console.WriteLine("-5*3 = " + Multiply(-5, 3));
            Console.WriteLine("19/3 = " + Divide(19, 3));
            Console.WriteLine("-19/3 = " + Divide(-19, 3));

        }


        /// <summary>
        /// 加法
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        static int Add(int a,int b)
        {
            int tmp = 0;
            while(b!=0)
            {
                tmp = a ^ b; //不带进位的加法
                b = (a & b) << 1; //只带进位的加法
                a = tmp;
            }
            return a;
        }



        /// <summary>
        /// 减法
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        static int Subtraction(int a, int b)
        {
            return Add(a, negtive(b));
        }

        /// <summary>
        /// 乘法
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        static int Multiply(int a, int b)
        {

            int mark = a ^ b;
            //对被除数和除数取绝对值
            a = a < 0 ? Add(~a, 1) : a;
            b = b < 0 ? Add(~b, 1) : b;

            int res = 0;
            while (b != 0)
            {
                if ((b & 1) != 0)
                    res = Add(res, a);
                a = a << 1;
                b = b >> 1;


            }

            if (mark < 0)
            {
                res = negtive(res);
            }
            return res;
        }

        /// <summary>
        /// 除法
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        static int Divide(int a,int b)
        {

            int mark = a ^ b;
            //对被除数和除数取绝对值
            a = a < 0 ? Add(~a, 1) : a;
            b = b < 0 ? Add(~b, 1) : b;

            int res = 0; 
            while(a>=b)
            {
                a = Subtraction(a, b);
                res = Add(res, 1);
            }

            if(mark<0)
            {
                res = negtive(res);
            }

            return res;
        }

        /// <summary>
        /// 增加负号
        /// 取反加一
        /// </summary>
        /// <param name="a"></param>
        /// <returns></returns>
        static int negtive(int a)
        {
            return Add(~a, 1);
        }


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值