逻辑运算在编程中起着至关重要的作用,它能够判断表达式的真假值。
让我们来了解一些基本的逻辑运算符:&&、||和!。
- C、Objective-C、C++、Java、C、仓颉、PHP、Kotlin等编程语言都使用&&、||和!来表示逻辑与、逻辑或和非运算。
- 实际上,C/C++的iso646.h头文件提供了一套替代符号,使用and、or、not来代替逻辑运算符,这些符号本质上是通过宏定义来实现的。
- Shell类语言与C系语言类似,也使用!、&&、||来表示不同的逻辑组合。
- 在SQL中,我们使用and、or和not来进行逻辑运算。
- Pascal语言中,逻辑与、逻辑或和非运算的表示方式与位运算的表示方式相同,取决于操作数的类型。如果是布尔类型,则and、or、not表示逻辑运算,否则表示位运算。
- Fortran语言中,逻辑运算符包括.and.、.or.和.not.,并且还提供了.eqv.和.neqv.来判断两个逻辑值是否相等或不等。
- PHP语言额外支持and、or和xor三种逻辑运算符。其中,and和||的含义相同,or的含义也与||相似,而xor表示两个逻辑值必须一真一假才为真。值得注意的是,and、or、&&和||的优先级不同,优先级的高低顺序为:&&、or、and、||。
逻辑与运算符的优先级高于逻辑或运算符,而逻辑非运算符的优先级最高。
&&和||这两种逻辑运算符都支持短路计算,这种计算方式既能提高效率又符合人类的常规思维,就像“你都没来过,还吵吵啥”这样的日常逻辑。
- 大多数编程语言都支持短路计算,包括C系语言和Shell等。
- 具体来说,C、Objective-C、C++、Java、C、仓颉、PHP、Kotlin以及Shell等都采用了这种机制。
需要注意的是,在编程中,我们常常会误将数学表达式i < j < k等同于逻辑运算i < j && j < k。但实际上这两者在几乎所有编程语言中并不等价。
- 这种差异产生的原因是语言的语法定义了明确的运算符优先级和结合性。无论操作数和运算符的组合形式如何,都会产生固定的运算结果。即使连续的逻辑表达式也不能按照人类的“连续”逻辑去理解。
- Python是一个特例,它支持连续的逻辑表达式。例如,print(1 < 10 > 9)将返回True。这种特性被称为链式比较(chained comparison)。
- 在Python中,a < f(x) < b与a < f(x) and f(x) < b是存在差异的。前者中的f(x)只会计算一次。