布尔代数(boolean algebra)定义了一组操作,其值为真(true)或假(false)。它的发明者是十九世纪中叶的数学家乔治・布尔(George Boole)。

在数字计算机发明的早期,人们发现布尔代数可以用来描述数字电路的设计。同时,在计算机程序中,布尔表达式被用来表示逻辑操作。

一个布尔表达式(boolean expression)包括一个布尔运算符以及一个或多个操作数。每个布尔表达式都意味着一个为真或假的值。以下为运算符集合:

  • 非(NOT):标记为 ¬ 或 ~ 或 '
  • 与(AND):标记为^或 ·
  • 或(OR):标记为 ∨ 或 +

NOT 是一元运算符,其他运算符都是二元的。布尔表达式的操作数也可以是布尔表达式。示例如下:

达式 说明 表达式 说明
¬X NOT X ¬X∨Y (NOT X) OR Y
X^Y X AND Y ¬(X^Y) NOT (X AND Y)
X∨Y X OR Y X^¬Y X AND (NOT Y)

NOT

NOT 运算符将布尔值取反。用数学符号书写为 ¬X,其中,X 是一个变量(或表达式),其值为真(T)或假(F)。下表列出了对变量 X 进行 NOT 运算后所有可能的输岀。 左边为输入,右边(阴影部分)为输出:

X ¬X
F T
T F

真值表中,0 表示假,1 表示真。

AND

布尔运算符 AND 需要两个操作数,用符号表示为 X ^ Y。下表列出了对变量 X 和 Y 进行 AND 运算后,所有可能的输出(阴影部分):

X Y X^Y
F F F
F T F
T F F
T T T

当两个输入都是真时,输出才为真。这与 C++ 和 Java 的复合布尔表达式中的逻辑 AND 是相对应的。

汇编语言中 AND 运算符是按位操作的。如下例所示,X 中的每一位都与 Y 中的相应位进行 AND 运算:

X :        11111111
Y :        00011100
X ^ Y :  00011100

如下图所示,结果值 0001 1100 中的每一位表示的是 X 和 Y 相应位的 AND 运算结果。

OR

布尔运算符 OR 需要两个操作数,用符号表示为 X∨Y。下表列出了对变量 X 和 Y 进行 OR 运算后,所有可能的输出:

X Y X∨Y
F F F
F T T
T F T
T T T

当两个输入都是假时,输出才为假。这个真值表与 C++ 和 Java 的复合布尔表达式中的逻辑 OR 对应。

OR 运算符也是按位操作。在下例中,X 的每一位与 Y 的对应位进行 OR 运算,结果为 1111 1100:

X :     11101100
Y :     00011100
X∨Y : 11111100

如下图所示,每一位都独立进行 OR 运算,生成结果中的对应位。

运算符优先级

运算符优先级原则(operator precedence rule)用于指示在多运算符表达式中,先执行哪个运算。在包含多运算符的布尔表达式中,优先级是非常重要的。

如下表所示,NOT 运算符具有最高优先级,然后是 AND 和 OR 运算符。可以使用括号来强制指定表达式的求值顺序:

表达式 运算符顺序
¬X∨Y NOT,然后 OR
¬(X^Y) OR,然后 NOT
X∨(X^Y) AND,然后 OR

布尔函数真值表

布尔函数(Boolean function)接收布尔输入,生成布尔输出。所有布尔函数都可以构造一个真值表来展示全部可能的输入和输出。下面的这些真值表都表示包含两个输入变量 X 和 Y 的布尔函数。右侧的阴影部分是函数输岀:

示例 1:¬X∨Y

X ¬X Y ¬X∨Y
F T F T
F T T T
T F F F
T F T T

示例 2:X^¬Y

X Y ¬Y X^¬Y
F F T F
F T F F
T F T T
T T F F

示例3: (Y^S)∨(X^¬S)

X Y S Y^S ¬S X^¬S (Y^S)∨(X^¬S)
F F F F T F F
F T F F T F F
T F F F T T T
T T F F T T T
F F T F F F F
F T T T F F T
T F T F F F F
T T T T F F T

示例 3 的布尔函数描述了一个多路选择器(multiplexer),一种数字组件,利用一个选择位(S)在两个输出(X 和 Y)中选择一个。如果 S 为假,函数输出(Z)就和 X 相同;如果 S 为真,函数输出就和 Y 相同。下面是多路选择器的框图:

下一篇:1.11 字符在计算机中是如何表示的
1.12 汇编语言布尔表达式
处理器架构
2.1 CPU处理器架构
2.2 32位x86处理器架构
2.3 x86-64处理器架构
2.4 x86计算机组件
汇编语言基础
3.1 第一个汇编语言程序
3.2 汇编语言常量
3.3 汇编语言保留字
3.4 汇编语言标识符
3.5 汇编语言伪指令

汇编语言布尔表达式(NOT、AND、OR)相关推荐

  1. 汇编语言标识符及其命名规则

    标识符(identifier)是由程序员选择的名称,它用于标识变量.常数.子程序和代码标签. 标识符的形成有一些规则: 可以包含 1 到 247 个字符. 不区分大小写. 第一个字符必须为字母 (A- ...

  2. 汇编语言零基础入门学习教程

    汇编语言是一种最低级.最古老.不具有移植性的编程语言,它能够直接访问计算机硬件,所以执行效率极高,占用资源极少,一般用于嵌入式设备.驱动程序.实时应用.核心算法等. 汇编语言的缺点是开发周期特别长,实 ...

  3. 字符在计算机中是如何表示的?

    如果计算机只存储二进制数据,那么它如何表示字符呢?计算机使用的是字符集,将字符映射为整数.早期,字符集只用 8 位表示.即使是现在,在字符模式(如 MS-DOS)下运行时,IBM 兼容微机使用的还是 ...

  4. CPU处理器架构和工作原理浅析

    汇编语言是学习计算机如何工作的很好的工具,它需要我们具备计算机硬件的工作知识. 基本微机设计 下图给出了假想机的基本设计.中央处理单元(CPU)是进行算术和逻辑操作的部件,包含了有限数量的存储位置-- ...

  5. 32位x86处理器架构

    本节重点讲解了 32 位 x86 处理器的基本架构特点.这些处理器包括了 Intel IA-32 系列中的成员和所有 32 位 AMD 处理器. 操作模式 x86 处理器有三个主要的操作模式:保护模式 ...

  6. 64位x86-64处理器架构

    本节重点关注所有使用 x86-64 指令集的 64 位处理器的基本架构细节.这些处理器包括 Intel 64 和 AMD64 处理器系列.指令集是已讨论的 x86 指令集的 64 位扩展.以下为一些基 ...

  7. HLA高级汇编语言基础

    HLA高级汇编语言环境的搭建与设置 我的操作系统:WINDOWS7 需要下载的东西:MASM32:http://www.masm32.com/masmdl.htm  HLA:http://webste ...

  8. Intel汇编语言程序设计学习-第六章 条件处理-上

    条件处理 本章要点 1.简介 2.布尔和比较指令 3.条件跳转 4.条件循环指令 5.条件结构 6.应用:有限状态机 7.决策伪指令 6.1  简介 本章,读者将看到高级条件分支如何翻译成底层的实现代 ...

  9. 汇编语言布尔和比较指令简介

    前面介绍了四种基本的布尔代数操作:AND.OR.XOR 和 NOT.用汇编语言指令,这些操作可以在二进制位上实现.同样,这些操作在布尔表达式层次上也很重要,比如 IF 语句. 首先了解按位指令,这里使 ...

最新文章

  1. Easy3D:一个轻量级、易用、高效的C++库,用于处理和渲染3D数据
  2. Wiener Filter
  3. oracle ORA-01000: maximum open cursors exceeded问题的解决方法
  4. 揭秘Kaggle神器xgboost
  5. 如何保存QQ聊天记录
  6. 图片马可以直接连接吗_商标买来可以直接使用吗?
  7. java 封装(Encapsulation)
  8. jupyter notbook远程连接配置(Ubuntu16.04)
  9. 阿里语音识别(语音转文字)java调用全程手把手详解-适合中小学生快速上手
  10. matlab画全球参数分布图 绘制世界地图
  11. MOS管安全工作区SOA及根据SOA选择MOS管
  12. MySQL基础架构:一条SQL“查询语句”是如何执行的
  13. 【Multisim仿真】光控报警电路
  14. Lazada代入驻靠谱?Lazada代入驻多少钱?
  15. mysql_slow_详解MySQL中SlowLog的实际配置
  16. 诈骗防范案例提醒:【韵⁢⁢达】您好, 因您用韵⁢⁢达收过12次,现复⁢制囗⁢令
  17. 运动控制卡的函数库与Linux,运动控制卡应用开发教程之使用Qt
  18. 教你使用内嵌chatGPT的新必应(bing)
  19. 登录拦截之后,登录页面出现在iframe的src里面
  20. 如何高效地阅读英文文献?

热门文章

  1. ArcGIS AddIN开发:如何调用ArcMap中的选择工作空间的窗体
  2. 【linux】虚拟机安装centos后ping ip地址出现错误:Network is unreachable
  3. 如何屏蔽TCP 报头中的内容-位置字段中显示的 IP 地址
  4. Spring 3.0 注解注入详解
  5. Tensorflow 错误总结:NameError: name 'core' is not defined
  6. CentOS 6.X 关闭不需要的 TTY 方法
  7. 详解 TCP 和 UDP
  8. linux高可用性,linux – 高可用性Cron Jobs
  9. [云炬创业基础笔记]第六章商业模式测试17
  10. 云炬金融每日一题20211010