• 理解Go中的布尔逻辑


    布尔数据类型(bool)可以是两个值之一,truefalse布尔值在编程中用于比较和控制程序流程。

    布尔值表示与数学逻辑分支相关的真值,它指示计算机科学中的算法。布尔(Boolean)一词以数学家乔治·布尔(George Boole)命名,总是以大写字母B开头。

    Go中表示布尔值的数据类型是bool,全部小写。值truefalse将始终分别是小写的tf,因为它们在Go中是特殊值。

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

    比较运算符

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

    下表展示了布尔比较操作符。

    操作符含义
    ==等于
    !=不等于
    <小于
    >大于
    <=小于等于
    >=大于等于

    为了理解这些操作符是如何工作的,让我们在Go程序中将两个整数赋值给两个变量:

    x := 5
    y := 8
    
    • 1
    • 2

    在这个例子中,因为x的值是5,所以它小于y的值是8

    使用这两个变量及其关联的值,我们来遍历前一个表中的操作符。在这个程序中,你要让Go打印出每个比较运算符的计算结果是true还是false。为了更好地理解这个输出,你还需要Go打印一个字符串,显示它正在求值:

    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)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    Outputx == y: false
    x != y: true
    x < y: true
    x > y: false
    x <= y: true
    x >= y: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    按照数学逻辑,Go从表达式中计算了以下内容:

    • 5 (x)等于8 (y)吗?false
    • 5不等于8吗?true
    • 5小于8吗?true
    • 5大于8吗?false
    • 5小于或等于8吗?true
    • 5不小于等于8吗?false

    虽然这里使用整数,但也可以用浮点值替换。

    字符串也可以与布尔操作符一起使用。除非使用额外的字符串方法,否则它们是区分大小写的。

    你可以看看如何在实践中比较字符串:

    sammy := "Sammy"
    sammy := "sammy"
    
    fmt.Println("Sammy == sammy: ", Sammy == sammy)
    
    • 1
    • 2
    • 3
    • 4
    OutputSammy == sammy:  false
    
    • 1

    字符串Sammy不等于字符串Sammy,因为它们并不完全相同;一个以大写字母S开头,另一个以小写字母S开头。但是,如果你添加另一个变量,并将其赋值给Sammy,那么它们将计算为相等:

    sammy := "Sammy"
    sammy := "sammy"
    alsoSammy := "Sammy"
    
    fmt.Println("Sammy == sammy: ", Sammy == sammy)
    fmt.Println("Sammy == alsoSammy", Sammy == alsoSammy)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    OutputSammy == sammy:  false
    Sammy == alsoSammy true
    
    • 1
    • 2

    你也可以使用其他比较操作符,包括><来比较两个字符串。Go将使用字符的ASCII值按字典顺序比较这些字符串。

    你也可以使用比较操作符计算布尔值:

    t := true
    f := false
    
    fmt.Println("t != f: ", t != f)
    
    • 1
    • 2
    • 3
    • 4
    Outputt != f:  true
    
    • 1

    上述代码块计算出true不等于false

    注意===这两个操作符之间的区别。

    x = y   //设x = y
    x == y  // 计算x是否等于y
    
    • 1
    • 2

    第一个=是赋值操作符,它将一个值设置为另一个值。第二个是比较运算符==,用于判断两个值是否相等。

    逻辑运算符

    有两个用于比较值的逻辑运算符。它们将表达式求值为布尔值,返回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
    
    • 1
    • 2
    • 3
    Outputtrue
    true
    true
    
    • 1
    • 2
    • 3

    在第一种情况下,fmt.Println((9 > 7) && (2 < 4))9 > 72 < 4都需要求值为true,因为使用了and操作符。

    在第二个例子中,fmt.Println((8 == 8) ||(6 != 6)),由于8 == 8被求值为true,因此6 != 6被求值为false没有任何区别,因为使用了or操作符。如果你使用and操作符,结果将为false。

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

    让我们用浮点数代替整数,并针对错误求值:

    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
    
    • 1
    • 2
    • 3

    在这个例子中:

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

    如果这些结果对你来说不清楚,请浏览一些[真值表]以进一步澄清。

    你也可以使用&&||!:

    !((-0.2 > 1.4) && ((0.8 < 3.1) || (0.1 == 0.1)))
    
    • 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,所以如果我们打印这条语句,最终的返回值是:

    Outputtrue
    
    • 1

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

    真值表

    数学的逻辑分支有很多东西需要学习,但你可以有选择地学习其中的一些,以提高编程时的算法思维。

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

    == (equal) 真值表

    x==y返回
    true==truetrue
    true==falsefalse
    false==truefalse
    false==falsetrue

    && (and) 真值表

    xandy返回
    trueandtruetrue
    trueandfalsefalse
    falseandtruefalse
    falseandfalsefalse

    || (or) 真值表

    xory返回
    trueortruetrue
    trueorfalsetrue
    falseortruetrue
    falseorfalsefalse

    ! (not) 真值表

    | not | x | 返回 |
    | — | — | — | — |
    | not | true | false |
    | not | false | true |

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

    使用布尔操作符控制流量

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

    一个条件求值为布尔值true或false,表示程序中做出决定的一个点。也就是说,条件会告诉你某项计算结果是true还是false。

    子句是跟在条件之后的代码块,它规定了程序的结果。也就是说,它是“如果xtrue,那么做这个”结构的“做这个”部分。

    下面的代码块展示了一个比较运算符和条件语句协同工作来控制Go程序流程的例子:

    if grade >= 65 {                 // Condition
    	fmt.Println("Passing grade") // Clause
    } else {
    	fmt.Println("Failing grade")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这个程序将评估每个学生的成绩是及格还是不及格。以成绩为83的学生为例,第一个语句将被求值为true,并触发打印语句Passing grade。如果一个学生的成绩是59,第一个语句将被求值为false,因此程序将继续执行与else表达式绑定的print语句: Failing grade

    布尔运算符提供了一些条件,可以通过流控制语句来决定程序的最终结果。

    总结

    本教程介绍了布尔类型的比较和逻辑操作符,以及真值表和使用布尔进行程序流控制。

  • 相关阅读:
    Linux 防火墙 firewalld 常用命令
    【80天学习完《深入理解计算机系统》】第十五天 4.1 Y86-64指令集与Verilog HDL
    西门子精彩触摸屏SMART V3组态报警的具体方法示例
    go ants源码分析
    区块链私链搭建出现错误
    如何实现一个 Paxos
    docker安装和优化
    vue3项目登录成功后根据角色菜单来跳转指定页面(无首页)
    css3实现无缝滚动,鼠标经过暂停
    常用的软件项目管理工具一览
  • 原文地址:https://blog.csdn.net/QIU176161650/article/details/133784469