位运算 计算两个二进制数

本文介绍了如何使用位运算进行二进制数的加减乘除运算,详细阐述了正数、负数和一正一负两种情况下二进制相加的步骤,包括取补码和异或操作。并探讨了通过递归思想解决进位问题,以及加法、减法、乘法和除法之间的关系。
摘要由CSDN通过智能技术生成

利用位运算数学式子使两个二进制数进行加减乘除

如我们平时所见,要将两个二进制数相加,很简单,但是如果让你来设计程序来实现计算机的运算,倒是有一番难度。
接下来我们将使用位运算式子,来方便我们编写计算二进制数的程序,毕竟只要使用公式实现了加法的运算,其它复杂的运算都可以由加法来模拟。
以下只是提供一种程序编写的思路,不涉及具体的程序语言及代码细节


现将两个二进制数binary1, binary2相加,则又以下三种情况

1、若binary1与binary2都为正数,则公式为
//其中carryBit为需要进位的二进制数
//注意result、binary1、binary2始终都为二进制形式
binary = binary1 ^ binary2;
result = binary ^ carryBit;

//carryBit 的计算方法为
carryBit = (binary1&binary2)<<1;		//其实carryBit这么算还不完整,但为了方便理解,暂且先这样,稍后再讲解

//因此合并起来则为:
result = binary1^binary2 ^ (  (binary1^binary2)<<1  );	

去掉啰嗦的注释后:

result = binary1^binary2 ^ (  (binary1^binary2)<<1  );	

例1: 2 + 3 = 5
① 二进制形式: 000010 + 000011 = 000101

       000010          binary1
^      000011          binary2
-----------------
       000001          binary

②还记得carryBit嘛?第二步我们还需要求的就是它

        000010          binary1
&       000011          binary2
-----------------
        000010          
<<           1
-----------------
        000100          carryBit

③之后carryBit 需要与binary1、binary2异或之后的binary进行 异或 运算

        000001          binary
^       000100          carryBit
-----------------
        000101          result			//漂亮的答案
2、若binary1与binary2都为负数,则式子为
//由于需要将binary1与binary2转化为补码,因此先取反再加1
binary1 = (~binary1)+1;	//注意符号位不取反
binary2 = (~binary2)+1;	//注意符号位不取反

//转化为补码形式后,计算两个二进制数相加时,与binary1、binary2都为正时的计算一样
binary = binary1 ^ binary2;
result = binary ^ carryBit;

//计算之后,由于result 处于补码形式,因此需要转化为原码,先减1再取反
result = ~(result-1);	//注意符号位不取反

去掉啰嗦的注释后:

binary1 = (~binary1)+1;	
binary2 = (~binary2)+1;	

result = binary1^binary2 ^ carryBit;

result = ~(result-1);	

例2: -2 + (-3) = -5
① 二进制形式: 100010 + 100011 = 100101
负数需取补码: 111110+ 111101= 111011

       111110          binary1
^      111101          binary2
-----------------
       000011          binary

②求carryBit

        111110         binary1
&       111101         binary2
-----------------
 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值