lua中有三个逻辑操作符:and,or,not(逻辑与,逻辑或,逻辑非),同样c++也有类似的三个逻辑操作符:&&,||,!(逻辑与,逻辑或,逻辑非)。他们的运算对象就是真和假。lua中nil和false是属于假,true和其他任何东西都是真。c++中也有类似的东西。0,NULL和false属于假,true其他任何非空的东西都属于真。lua与c++中逻辑运算规则相似却又有所不同。

他们都采用短路求值(short-circuit evaluation)的策略。即:逻辑与和逻辑或操作符都是先求左侧运算对象的值再求右侧运算对象的值,当且仅当左侧运算对象无法确定表达式的结果时才会计算右侧运算对象的值。这句话可以推导出很多令大家初看下比较诧异的说法。

比如说:Lua中,and运算规则是:"如果and的第一个操作数(左操作数)是假就返回第一个操作数,如果为真就返回第二个操作数(右操作数)"。这句话其实很好理解,如果左操作数是假的,我们就不必再判断第二个操作数,直接返回假就行了,也就是左操作数。如果左操作数是真,那么我们还得看右操作数,他为真,返回值就是真,他为假,返回值就是假。对应上面的"如果为真就返回第二个操作数(右操作数)"。细心的朋友会发现,lua返回的是操作数而非操作数对应的true或false。这一点也是lua和c++的区别所在,c++的逻辑操作返回的一定是0或1。

/*c++代码*/
std::cout<<(&&); //输出是1(返回true)
std::cout<<(||); //输出是1 (返回true) --lua代码
print( and ); --输出是5 (返回数值5)
print( or ); --输出是4(返回数值4)

虽然在这一点上c++和lua上有所区别,但这点差异也只是让lua的逻辑操作符有了c++中三目运算符? : 的功能。比如说:

a and b or c -- 相当于a?b:c (*注意这是有前提的,前提就是b不为nil或false,即b是为真的)
max=(x>y)and x or y --这句代码可以求两者中大的一个并赋值到max

有一点不得不说,Lua中0也是为真的哦,这一点也很重要。

逻辑操作符---Lua: and,or,not 对比 C++:&&,||,!的更多相关文章

  1. Lua逻辑操作符

    [1]逻辑操作符and.or和not 应用示例: ) ) -- nil ) -- false ) ) ) ) ) ) ) print(not nil) -- ture print(not false) ...

  2. Linux Shell脚本逻辑操作符简介

    在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...

  3. 你好,C++(17)0.1*10不等于1.0——4.1.4 关系操作符4.1.5 逻辑操作符

    4.1.4  关系操作符 在C++中,除了需要用算术操作符对数据进行加减乘除的算术操作之外,我们有时候还需要对数据之间的关系进行操作,也就是对两个数据进行大小比较,得出它们之间的大小关系.在现实世界中 ...

  4. Chapter3_操作符_逻辑操作符

    逻辑操作符与(&&)或(||)非(^)能够对布尔类型的数据类型进行操作,并且生成布尔值,和关系操作符的产生的数据类型是一样的.需要注意的不多,有以下几点: (1)在需要使用string ...

  5. shell 的条件表达式及逻辑操作符简单介绍

    查看系统的shell: cat /etc/shells 文件测试表达式: -f 文件  文件存在且为普通文件则真,即测试表达式成立. -d 文件  文件存在且为目录文件则真,即测试表达式成立. -s ...

  6. java 运算符 与(&)、非(~)、或(|)、异或(^)逻辑操作符 与(&&) 或(||) 非(!)

    按位与&: 只要对应的二个二进位都为1时,结果位就为1 按位或|:只要对应的二个二进位有一个为1时,结果位就为1 按位异或^:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1) ...

  7. asp.net 逻辑操作符与(&&),或(||),非(!)

    逻辑操作符与(&&),或(||),非(!)能根据参数的关系返回布尔值 public class bool{ public static void main(string [] args ...

  8. shell 逻辑操作符

    Shell还提供了与( -a ).或( -o ).非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o&qu ...

  9. 《C++ Primer Plus》读书笔记之四—分支语句和逻辑操作符

    第六章 分支语句和逻辑操作符 1.&&的优先级低于关系操作符. 2.取值范围:取值范围的每一部分都使用AND操作符将两个完整的关系表达式组合起来: if(age>17&& ...

随机推荐

  1. java数据结构

    1.计算机科技的两大支柱 1.数据结构 2.算法 程序=数据结构+算法 2.定义:是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等等的学科 3.数据(Data):是对信息 ...

  2. windows bat 批处理 !vm 合并快播文件

    今天简单的写了一个bat批处理文件 用来处理快播的p2p的文件,一般回事这样的目录 你可以下载如下代码 @echo off for /r %%a in (.) do ( echo %%a cd %%a ...

  3. Date类型-演示JS中的日期

    <script type="text/javascript"> /* *演示JS中的日期 */ var date = new Date(); document.writ ...

  4. Array-基本功能

    <title>Array-基本功能</title></head> <body> <script type="text/javascrip ...

  5. 【iCore3 双核心板_FPGA】例程七:基础逻辑门实验——逻辑门使用

    实验指导书及代码包下载: http://pan.baidu.com/s/1Rs18U iCore3 购买链接: https://item.taobao.com/item.htm?id=52422943 ...

  6. 验证一个字符串是否由数字组成(Java)

    public class StringDemo{ public static void main(String args[]){ String str ="12343264sd6223&qu ...

  7. Java中的virtual method

    今天看jcvm的标准的 时候,看到有一个virtual method,感觉很疑惑,以前看Java的时候并没有发现有这类方法. 百度.Google了一下,才发现,Java中普通方法就是virtual m ...

  8. 我的PhoneGap安装配置经历

    一.PhoneGap简介 PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台.它使开发者能够利用 iPhone,Android,Palm,S ...

  9. python djang suit模板

    一.安装python3.django1.9 二.配置好项目环境,引入suit模板   python3 - m pip install django-suit==0.2.13 三.配置django后台s ...

  10. dump redo日志文件的信息

    通常会用到以下两个命令:1.'alter session'命令用来dump redo日志的文件头2.'alter system dump logfile'命令用来dump redo文件的内容 以上命令 ...