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

数字电子技术—逻辑代数基础 数字电子技术学习笔记 阅读详情

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

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. 逻辑运算表示算法运算减法原理

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

4. 总结

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

逻辑运算、移位运算、算术运算,整数和浮点数的加减法 XOR运算的一个应用是便指定的位反转,掩码中的1位对第一个输入中的相应的位进行反转,而掩码巾的0位使第一个输入中相应的位保持不变。如果新的符号位与原先的相同,那么运算成功,否则发生上溢或下溢,结果是非法的。以浮点数存储的实数的加法和减法被简化为小数点对齐后以符号加绝对值格式(符号和尾数的组合)存储的两整数的加法和减法。掩码中的1位对第一个输入中的相应的位进置位, 而掩码中的0位使第一个输入中相应的位保持不变。整数以二进制补码表示法存储,正数的补码就是它的原码,负数的补码等于原码的反码加1。 阅读详情

相关推荐

运算方法与运算器——定点运算器

一、小引 1、逻辑运算 计算机中逻辑运算主要有: 逻辑非:按位反 逻辑加:按位或 逻辑乘:按位与 逻辑异或:按位加 2、移位运算 左移n位等于乘2n 右移n位等于除2n (1)、移位与加法结合,实现乘除运算 (2)、无符号数的移位叫逻辑移位 空位补0 (3)、有符号数的移位叫算术移位 符号位不变 (4)、移位寄存器 作用: ①、实现移位指令 ②、浮点运算中的小数点对其 ③、构成移位寄存器型计数器...

qq_43581718的博客 3215

计算机中的逻辑运算(与、或、非、异或、同或、与非、或非)

计算机中的逻辑运算又被称作为“布尔运算”,分别为:逻辑**与**运算、逻辑**或**运算,逻辑**非**运算,“逻辑**异或**运算。此外在门电路中还有:**同或**运算、**与非**运算、**或非**运算。共七种。......

IJaa 26万+

OpenDRIVE车道计算避坑指南:为什么你的poly3曲线总对不齐?

本文深入解析OpenDRIVE标准中车道几何计算的三大核心难题:参数化三次多项式(ParamPoly3)的坐标系转换与参数映射、车道偏移与宽度的优先级判定,以及螺旋线(Spiral)接续的平滑性保障。通过实战案例与代码示例,提供了一套避免车道线错位与曲率不连续的精确计算与验证方法,是高精地图开发与仿真场景构建的实用避坑指南。

q9w8e7r6t5的博客 424

逻辑运算(难以理解的公式讲解)

B代表当且仅当A与B不同时,结果为真,若A和B相同,则结果为假。非>算数运算符(加减乘除)>关系运算符(大于小于)>逻辑运算符(或、与)>赋值运算符(等于)解析:1+A代表真或A,此时无论A为真或A为假,结果都为真,即1;A代表真且A,1+A代表真或A(A只代表真假,不代表具体数值)2、A||B:只要A为真,则无需算B的值,结果为真。,即非(A)非(B)≠非(AB),参考下列2;B=+B(BA、B都为二进制数0或1)解析:A+AB=A(1+B)=A。解析:A=A+AB,所以A+=真+假=1+0=1。

weixin_45840759的博客 5763

Qwen 三代进化全景对比:从 Qwen2.5 到 Qwen3 再到 Qwen3.5

本文对比了阿里巴巴通义千问三代大模型(Qwen2.5、Qwen3、Qwen3.5)的技术演进。18个月内,模型在架构、训练数据和能力上实现显著突破:从纯稠密结构(Qwen2.5)发展为混合注意力架构(Qwen3.5),支持语言从29种扩展至201种,并实现原生多模态融合。关键进展包括引入MoE架构、Gated DeltaNet混合注意力机制(计算效率提升10倍)、以及从独立模态到早期视觉语言联合训练的转变。模型阵容从7个通用尺寸发展为8+个混合架构,最大参数量达397B,上下文窗口扩展至256K(托管版1M

m0_47999117的博客 1万+

图数据挖掘 ECC K-core core number truss number clique

K-core:什么叫k-core,给定一个正整数k(k>=0),k-core是一个G的最大子图(也就是说k-core是一个图的限制),将这个子图定义为Hk,对于Hk中的每个顶点v,他的度数都是大于等于k的。 k-core是内嵌的,如下图所示,集合{ABCD}是H3,也就是3-core的子图。而集合{ABCDE}是H2,也就是2-core的子图,集合{ABCDEGF}是H1,也就是1-core的子图,而从集合的角度来讲H3<H2<H1。 core number:什么叫kcor

weixin_45193103的博客 1686

算数表达式转换成二叉树来进行逻辑运算

给定形如:(2+3)*4-2 字符串,如何来将字符串转换成二叉树并进行后序遍历来进行逻辑运算得出答案;其实刚开始见到这个想到了离散数学里面所教的,但那只是理论但是印象中似乎也没有教如何建树又或者是我忘记了把(233333),所以关于建树的方法我参考了https://blog.youkuaiyun.com/qq120848369/article/details/5673969这个博客 总结了一下建树思路则是...

Ccc_2018 2414

汽水音乐自动化薅羊毛教程:从零搭建稳定赚钱脚本

📖 前言:为什么要学习自动化脚本?在数字时代,时间就是金钱。汽水音乐等App通过观看广告奖励用户金币的模式,本质上是将我们的时间转化为收益。本教程将教你如何用Python自动化这个过程,让程序为你"打工",实现被动收入。通过本教程,你将学到:移动端自动化测试的核心技术Python在自动化领域的实际应用如何将重复性任务转化为自动化流程创造属于自己的"数字员工"第一章:环境准备与基础配置1.1 硬件要求Android手机一部(建议使用备用机)USB数据线。

weixin_44947827的博客 5789

算术运算和逻辑运算

计算机的核心功能,就是运算。而运算的基本类型包括算术运算和逻辑运算。想要了解计算机是如何实现运算的,我们就得从算术运算指令和逻辑运算指令开始说起。 这是我们非常熟悉的模型机。我们在最一开始介绍模型机时,就用了一条加法指令作为例子。加法指令就是一种算术运算指令,当时这条例子中的,ADD R0, [6] 这条加法指令是将R0寄存器当中的数,和存储器地址为6的存储单元的数相加,并将结果放回到R0寄存...

gsllz的博客 9505

共享单车数据抓取与分析:使用Python爬虫抓取共享单车使用数据与地图信息

通过本篇博客,我们展示了如何使用Python爬虫抓取共享单车的使用数据和地图信息,并通过简单的数据分析得出有价值的见解。在实际应用中,数据的收集与分析不仅能帮助城市管理者更好地规划单车站点,还能为用户提供更精准的单车使用体验。未来,我们可以将此分析与机器学习模型相结合,进一步预测单车的使用趋势,优化调度算法,实现更加智能的共享单车管理。

2201_76125261的博客 2204

HFSS实战项目——GPS北斗双模微带天线

本文设计了一款方形圆极化微带天线应用于北斗B1和GPSL1频段,满足高增益、低VSWR、适当方向图等要求。设计中心频率为1568MHz,介质板采用厚度h=1.6mm的Arlon AD450(tm)板,相对介电常数为4.5,采用探针馈电。

2401_87464239的博客 1768

汇编 逻辑运算指令

循环右移 ROR 最低位进入 CF 标志位,再转回到 最高位。或指令 格式 : OR 目的操作数 ,源操作数。测试指令 格式 : TEST 目的操作数 ,源操作数。与指令 格式 : AND 目的操作数 , 源操作数。异或指令 格式 : XOR 目的操作数 ,源操作数。循环左移 ROL 最高位进入 CF 标志位,在转回最低位。

weixin_71018119的博客 1148

有之以为利,无之以为用,在 RAP 开发里的虚实取舍

摘要(149字) SAP RAP框架通过"有"与"无"的哲学平衡实现业务应用价值。其"有"体现在CDS视图、行为定义、服务绑定等具体对象,为系统提供形体;而"无"则表现为保留的扩展空间、未暴露的实现细节和框架托管的生命周期。在采购审批应用中,RAP既通过明确定义的行为模型建立业务语义,又通过验证、动作等机制保持灵活性。这种架构既确保核心功能稳固,又为未来演进留出余地,印证了"有之以为利,无之以为用"的技术智慧

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1306

<三>Python的运算符,算数运算符、赋值运算符、比较运算符、逻辑运算符和位运算符及他们的优先级。

Python的运算符,算数运算符、赋值运算符、比较运算符、逻辑运算符和位运算符及他们的优先级。

xiaodaimu00的博客 1302

【系统架构设计师】十、统一建模语言UML(基本概念|UML2.0|SysML)

UML 2.0 提供了 14 种图,分别是类图、对象图、用例图、序列图、通信图(协作图)、状态图、活动图、构件图(组件图)、部署图、制品图、组合结构图、包图、交互概览图和计时图(定时图)。序列图、通信图、交互概览图和计时图均被称为交互图。 系统建模语言(SysML)是一种通用图形建模语言,用于指定,分析,设计和验证可能包括硬件,软件,信息,人员,程序和设施的复杂系统。特别是,该语言提供了图形表示,其具有用于建模系统需求,行为,结构和参数的语义基础,用于与其他工程分析模型集成。

帅次的博客 2521

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

用ARM进行汇编语言编程(2)算数指令,CPSR寄存器与逻辑运算

这是我学习的笔记,有什么错误和不懂的地方欢迎来私信我,或者加我qq。

Ba1_Ma0的博客 1462

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

4.1 算术运算和逻辑运算

计算机组成 4 算数逻辑单元 4.1 算术运算和逻辑运算 计算机的核心功能,就是运算。而运算的基本类型包括算术运算和逻辑运算。想要了解计算机是如何实现运算的,我们就得从算术运算指令和逻辑运算指令开始说起。 这是我们非常熟悉的模型机。我们在最一开始介绍模型机时,就用了一条加法指令作为例子。加法指令就是一种算术运算指令,当时这条例子中的,ADD R0, [6] 这条加法指令是将R0寄存器...

bangren3304的博客 1640

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C#中算数运算符及逻辑运算

在我学过的计算机语言中,都用到了运算符和表达式,但是他们的运算符都差不太多,那么就先来看一下C#语言中的表达式是怎样的吧。 算数运算符 + - * / %(加、减、乘、除、取余) 变量先声明才能赋值,优先级:先乘除再加减,有括号再算括号里面的。 类型自动转换 参与运算(算数和赋值运算)的操作数和结果类型必须一致,当不一致时,满足下面条件时,系统自动完成类型转换(隐式转换) 1、两种类型兼容,例如:int和double兼容(都是数字类型);目标类型大于源类型,例如:double&g...

Java领域 624

一文搞定js中的各种基础运算符(算数运算符、关系运算符、逻辑运算符)

一、 算数运算符 二、 关系运算符 三、逻辑运算符 四、运算符的优先级

xiaozuo144的博客 397

python运算符&用法的详细介绍

python算数运算、比较运算符、成员运算符、逻辑运算、赋值运算的用法介绍, 以及类型转换的使用

weixin_54359859的博客 5635

js算数运算符归纳

算数运算符 数值的 + ,- , * , / ,%(取模) 和数学运算完全一样 小数点运算时会产生误差 + 运算 var a = "4"; var b = 1; var b = true; // var s = a+b; 4true var b; //var s = a+b; 4undefined var b = null;//var s = a+b; 4null var b ={a:1};//var s = a+b; 4[object Object]

weixin_45207266的博客 514

关于二进制的表示,左移,运算的相关知识

左移 位数 可以理解为 扩大为原来的 进制数的 位数 次方 倍,比如二进制数左移一位是 扩大为原来的 2的1次方倍 也就是两倍,左移两位就是扩大为原来的2的2次方倍也就是四倍。在对比十进制数,10左移1位 就是100也就是10的1次方倍,左移两位也就是10的2次方倍也就是100。对照着十进制去理解二进制就会非常简单而且容易理解。

北洋的博客 1309

《C语言》-(算术运算、关系运算、逻辑运算)

一、算数运算 1.C语言中一共提供了34种运算符 2.基本运算(加、减、乘、除) 3.取余运算(也称模运算) %两边都是整数,如果为小数会报错 取余结果的正负性取决于%左边的整数 取余运算可以将一个整数的值固定在多少以内 4.自动类型装换 int a = 10.8; // double 自动转换成int,会有警告; 5.强制类型装换 int a = (in...

weixin_34161032的博客 900

python将输入值转化为元组_python基础(2) 输入语句、数据类型转换、算数运算、赋值运算、比较运算、逻辑运算...

一、输入使用input内置函数,接受用户输入的内容。input接受的数据是一个字符串数据。注意:使用input在获取到数据之后需要使用变量接收。info = input('请输入:')print(info)二、数据类型转换其他类型转整型使用int 内置函数来将其他类型转换成整型,如果被转换的字符串不是一个合法的整数,会报错。如果被转换的是一个浮点数,会保留整数部分。a = int('hello')...

weixin_39880621的博客 2063

二进制及逻辑运算学习

1.十进制转二进制:(如果是整数)除以2取余,逆序排列,(如果是小数)乘以2取整,顺序排列 例:10(10)=1010(2) 10%2=0  5%2=1  2%2=0  1%2=1 最后表示为二进制就是1010 例: (0.625)10= (0.101)2 0.625X2=1.25 ……1 0.25 X2=0.50 ……0 0.50 X2=1.00 ……1 2

Laughing 9765

JavaScript的算数,赋值,比较和逻辑运算符

类似a=1+1这样的表达式称为运算符,js的运算符分为算数,赋值,比较和逻辑运算符;常见的算数有:+ - * / %(加减乘除,取模),比方说5/4=4*1+1;5%4=1,js算数顺序:从左往右,先* / %后+ ;js的值包含数字,字符串,布尔值;在算数运算中,“加号”:有字符串,按照字符串处理,没有按照数字处理;注意布尔值false=0,true=1;比方来说:1+"a"="1"+"a"="1a" ; 1+false=1+0=1; false+"a"="falsea"; 1-"1"=1-1...

ElegantHedgehog的博客 231
上一篇: TOF测距原理(4)-双边TOF误差分析
下一篇: IEEE754浮点原理 - 计算机存储小数的误差有多少
老Z先生
博客等级 码龄4年 417粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值