如何将算数运算转换成逻辑运算

        逻辑运算是一切数学的基础也是计算机的基础,无论是数学里面的高等数据还是概率论,都是基于集合论进行搭建,集合论最基本的操作就是逻辑运算。什么是逻辑运算呢?在逻辑运算中,仅有“与”、“或”、“非”三种基本运算,在算数运算中,由“加”、“减”、“乘”、“除”四种基本运算组成。逻辑运算的输入只能是“真”或“假”,输出也只能是“真”或“假”;算数运算的输入可以是所有的实数,输出也可以是所有的实数。逻辑运算和算法运算从直观上感觉是完全不同,他们有不同的输入和不同的输出,但是满足了某些情况可以将算数运算转换成逻辑运算,当前这也是计算机得到极大发展的理论基础。

1. 基本逻辑运算

        在逻辑运算中只有“与”、“或”、“非”三种基本运算,除此之外还有一种基于这些基础运算的一种衍生运算 -“异或”。逻辑运算中,输入只能是“真”或者“假”,为了与处理器中的二进制对应起来,以下“真”使用“1”代替,“假”使用“0”代替.

        在编程的开发语言中的逻辑与,分别有“与”与“位与”(位与,按bit位进行“与”运算),如在C语言中使用“&&”表示与,使用“&”表示“位与”,在逻辑与的运算中当输入条件同时为真时其运算结果才为真,否者结果为假,如下:

1\ \ AND\ \ 1= 1\\ 1\ \ AND\ \ 0= 0\\ 0\ \ AND\ \ 1= 0\\ 0\ \ AND\ \ 0= 0\\

        在逻辑或运算中,同样存在“或”和“位或”,在C语言中使用“||”表示“或”,使用“|”表示“位或,只要有一个输入为正其结果就为真,如下:

1\ \ OR\ \ 1 = 1\\ 1\ \ OR\ \ 0= 1\\ 0\ \ OR\ \ 1= 1\\ 0\ \ OR\ \ 0= 0\\

        在逻辑非中,只有一个输入,运算结果将其取反,如下:

NOT\ \ 1= 0\\ NOT\ \ 0= 1\\

        在逻辑异或中,与“与”、“或”不同值存在“位异或”,输入不同时运算结果为真,输入相同时运算结果为假,如下:

1\ \ XOR\ \ 1 = 0\\ 1\ \ XOR\ \ 0= 1\\ 0\ \ XOR\ \ 1= 1\\ 0\ \ XOR\ \ 0= 0\\

        异或可以由基本逻辑运算“与”、“或”、“非”组成,具体如下:

a\ \ XOR\ \ b = ((NOT \ a)\ AND \ b)\ OR\ ( a\ AND \ (NOT \ b))\\

2. 逻辑运算表示算法运算加法原理

2.1. 一个特殊示例

        如上所示,数字5的二进制和数字2的二进制相加得到数字7,显然这两个数的二进制的加法计算过程就是二进制位的异或运算过程,那么能否使用异或运算来计算加法呢?当然上面的加法是一种特殊情况,在两个数相加不会产生二进制进位这种特殊情况下,是可以使用异或运算来计算加法,但如果两个数相加存在二进制进位那有该如何使用逻辑运算来计算加法呢?

2.2. 通用加法

        二进制算术加法(存在二进制进位):

        在上述二进制算数加法中无法直接使用逻辑运算,但由于异或运算可以计算不带进位的二进制加法,那我们就可以将其拆解成两部分,一部分是不带进位运算,另外一部分是带进位运算,然后将其这两部分结果处理后再相加即可得到算术加法运算结果。不考虑进位的二进制加法:

        在不考虑进位的二进制加法中,其运算过程其实就是按位异或运算,这也是异或运算称为半加运算的原因。当然没有考虑进位信息异或运算还不能用来计算常规的算术加法,接下来就要处理进位信息,首先需要获得进位信息,只有在都两个二进制位都为1这种情况下才会产生进位信息,其实这就是“位与”运算结果,如下:

        将通过异或运算得到的不带进位部分和通过逻辑与运算得到的进位信息再次相加可将进位信息整合进运算结果中,当然这里进位信息需要向左移动一个单位而不是直接参与运算,这是因为进位信息需要与下一位进行运算,过程如下:

#include "stdio.h"
#include "stdint.h"

uint8_t add(uint8_t a,uint8_t b)
{
    uint8_t s=0,c=0;
    do
    {
        s= a^b;
        c= a&b;
        a = s;
        b = c<<1;
    } while (c);

    return s;
}
int main()
{
    uint8_t a=11,b=22;
    printf("%d+%d=%d",a,b,add(a,b));
}

3. 逻辑运算表示算法运算减法原理

        通过上面我们已经能够通过逻辑运算来计算加法,当我们已有加法运算后,无须为减法重新设计一套规则,通过补码的加法就可完成减法运算,详细细节参考:补码原理-处理器是如何将整数减法运算转换成整数加法运算的-CSDN博客

4. 总结

        算数运算中可以通过步骤拆解将算数运算拆解成逻辑运算,而逻辑运算可以使用串联电路和并联电路等效,这基本是数字电路得到大规模应用的理论基础。

  • 31
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值