理解Go中的布尔逻辑

布尔数据类型可以是两个值之一,True或False。我们在编程中使用布尔值来进行比较并控制程序的流程。在本教程中,我们将介绍了解Boole如何在Go中工作所需的基础知识,包括布尔比较和逻辑运算符以及真值表。

布尔数据类型( bool )可以是两个值之一, truefalse 编程中使用布尔值来进行比较并控制程序的流程。

布尔值表示与数学逻辑分支相关的真值,它通知计算机科学中的算法。 以数学家George Boole命名,布尔一词始终以大写字母B开头。

Go for Boolean中的数据类型是bool ,全部小写。 truefalse将始终分别使用小写的tf ,因为它们是Go中的特殊值。

本教程将介绍了解bool数据类型如何工作所需的基础知识,包括布尔比较,逻辑运算符和真值表。

比较运算符

在编程中, 比较运算符用于比较值并评估为单个布尔值true或false。

下表显示了布尔比较运算符。

操作者 这是什么意思
== 等于
!= 不等于
< 少于
> 比...更棒
<= 小于或等于
> = 大于或等于

要理解这些运算符是如何工作的,让我们在Go程序中为两个变量分配两个整数:

x := 5
y := 8

在此示例中,由于x的值为5 ,因此小于y ,其值为8

使用这两个变量及其相关值,让我们通过上表中的运算符。 在这个程序中,你会要求Go打印出每个比较运算符是评估为true还是false。 为了帮助您更好地理解这个输出,您还可以打印一个字符串来显示它正在评估的内容:

package main

import "fmt"

func main() {
    x := 5
    y := 8

    fmt.Println("x == y:", x == y)
    fmt.Println("x != y:", x != y)
    fmt.Println("x < y:", x < y)
    fmt.Println("x > y:", x > y)
    fmt.Println("x <= y:", x <= y)
    fmt.Println("x >= y:", x >= y)
}
x == y: false
x != y: true
x < y: true
x > y: false
x <= y: true
x >= y: false

遵循数学逻辑,Go从表达式中评估了以下内容:

  • 5( x )等于8( y )?
  • 5不等于8吗? 真正
  • 5小于8吗? 真正
  • 5大于8吗?
  • 5小于等于8吗? 真正
  • 5不小于或等于8?

虽然这里使用了整数,但您可以使用浮点值替换它们。

字符串也可以与布尔运算符一起使用。 它们区分大小写,除非您使用其他字符串方法。

您可以在实践中查看字符串的比较方式:

Sammy := "Sammy"
sammy := "sammy"

fmt.Println("Sammy == sammy: ", Sammy == sammy)
Sammy == sammy:  false

字符串Sammy不等于字符串sammy ,因为它们不完全相同; 一个以大写字母S开头,另一个以小写字母s开头。 但是,如果添加另一个分配了Sammy值的变量,那么它们将评估为相等:

Sammy := "Sammy"
sammy := "sammy"
alsoSammy := "Sammy"

fmt.Println("Sammy == sammy: ", Sammy == sammy)
fmt.Println("Sammy == alsoSammy", Sammy == alsoSammy)
Sammy == sammy:  false
Sammy == alsoSammy true

您还可以使用其他比较运算符,包括><来比较两个字符串。 Go将使用字符的ASCII值按字典顺​​序比较这些字符串。

您还可以使用比较运算符评估布尔值:

t := true
f := false

fmt.Println("t != f: ", t != f)
t != f:  true

前面的代码块评估了true不等于false

注意两个operator ===之间的区别。

x = y   // Sets x equal to y
x == y  // Evaluates whether x is equal to y

第一个=是赋值运算符,它将一个值设置为另一个值。 第二个== ,是一个比较运算符,将评估两个值是否相等。

逻辑运算符

有两个逻辑运算符用于比较值。 它们将表达式计算为布尔值,返回truefalse 这些运算符是&&|| ,和! ,并在下面的列表中定义:

  • &&x && y )是and运算符。 如果两个陈述都是真的,那就是这样。
  • || x || y )是or运算符。 如果至少有一个陈述是真的,那就是这样。
  • !x )是not运算符。 只有在陈述是错误的情况下才是真的。

逻辑运算符通常用于评估两个或多个表达式是真还是真。 例如,它们可用于确定成绩是否正在通过以及学生是否在课程中注册,如果两种情况均为真,则将为学生分配系统中的成绩。 另一个例子是基于他们是否具有商店信用或在过去6个月内进行购买来确定用户是否是在线商店的有效活跃客户。

要理解逻辑运算符的工作原理,让我们评估三个表达式:

fmt.Println((9 > 7) && (2 < 4))   // Both original expressions are true
fmt.Println((8 == 8) || (6 != 6)) // One original expression is true
fmt.Println(!(3 <= 1))            // The original expression is false
true
true
true

在第一种情况下, fmt.Println((9 > 7) && (2 < 4)) ,因为使用了运算符,所以9 > 72 < 4需要评估为真。

在第二种情况下, fmt.Println((8 == 8) || (6 != 6)) ,因为8 == 8评估为真,所以6 != 6计算结果为假没有区别,因为or运算符。 如果您使用了and运算符,则会将其计算为false。

在第三种情况下, fmt.Println(!(3 <= 1))not运算符否定3 <=1返回的错误值。

让我们用浮点数代替整数,并以虚假评价为目标:

fmt.Println((-0.2 > 1.4) && (0.8 < 3.1))  // One original expression is false
fmt.Println((7.5 == 8.9) || (9.2 != 9.2)) // Both original expressions are false
fmt.Println(!(-5.7 <= 0.3))               // The original expression is true

在这个例子中:

  • and必须至少有一个false表达式计算为false。
  • or必须将两个表达式计算为false。
  • ! 必须使其内部表达式为true才能使新表达式计算为false。

如果您不清楚这些结果,请查看一些真值表以进一步说明。

您还可以使用&&||编写复合语句 ,和!

!((-0.2 > 1.4) && ((0.8 < 3.1) || (0.1 == 0.1)))

首先看一下最内层的表达式: (0.8 < 3.1) || (0.1 == 0.1) (0.8 < 3.1) || (0.1 == 0.1) 此表达式的计算结果为true因为两个数学语句都为true

接下来,Go将返回值true并将其与下一个内部表达式组合:( - (-0.2 > 1.4) && (true) 此示例返回false因为数学语句-0.2 > 1.4为false,( false )和( true )返回false

最后,我们有外部表达式: !(false) ,其计算结果为true ,因此如果我们打印出这个语句,最终的返回值是:

true

逻辑运算符&&|| ,和! 计算表达式并返回布尔值。

真相表

关于数学的逻辑分支还有很多东西需要学习,但是你可以有选择地学习它来改进编程时的算法思维。

以下是比较运算符==真值表,以及每个逻辑运算符&&|| 而且! 虽然您可以将它们推理出来,但记住它们也会有所帮助,因为它可以使您的编程决策过程更快。

== (相等)真值表

X == ÿ 返回
真正 == 真正 真正
真正 ==
== 真正
== 真正

&& (和)真值表

X ÿ 返回
真正 真正 真正
真正
真正

|| (或)真值表

X 要么 ÿ 返回
真正 要么 真正 真正
真正 要么 真正
要么 真正 真正
要么

! (不是)真相表

X 返回
真正
真正

真值表是逻辑中使用的常用数学表,在计算机编程中构造算法(指令)时要记住这些表。

使用布尔运算符进行流控制

要以流控制语句的形式控制程序的流和结果,可以使用条件后跟子句

条件评估为布尔值true或false,表示在程序中做出决定的点。 也就是说,条件会告诉您某些内容是否为true或false。

子句是遵循条件并指示程序结果的代码块。 也就是说,它是“做这个”构造的一部分“如果xtrue ,那么就这样做。”

下面的代码块显示了一个比较运算符的示例,它与条件语句协同工作以控制Go程序的流程:

if grade >= 65 {                 // Condition
    fmt.Println("Passing grade") // Clause
} else {
    fmt.Println("Failing grade")
}

该计划将评估每个学生的成绩是否通过或失败。 如果学生的成绩为83 ,则第一个陈述将评估为true ,并且将触发Passing grade的打印陈述。 如果学生的成绩为59 ,则第一个语句将评估为false ,因此程序将继续执行与else表达式相关联的print语句: Failing grade

布尔运算符表示可用于通过流控制语句决定程序的最终结果的条件。

结论

本教程通过比较和属于布尔类型的逻辑运算符,以及真值表和使用布尔值进行程序流控制。