diff --git a/src/study/day5/bool.go b/src/study/day5/bool.go new file mode 100644 index 0000000..67c879c --- /dev/null +++ b/src/study/day5/bool.go @@ -0,0 +1,46 @@ +package main + +import "fmt" + +// 一个布尔类型的值只有两种:true和false。 +// if和for语句的条件部分都是布尔类型的值, +// 并且==和<等比较操作也会产生布尔型的值。 +// 一元操作符!对应逻辑非操作,因此!true的值为false + +func main() { + // 布尔值可以和&&(AND)和||(OR)操作符结合,并且有短路行为: + // 如果运算符左边值已经可以确定整个布尔表达式的值, + // 那么运算符右边的值将不再被求值。 + var bool1 bool = true + // 再遇到第一个false时,此语句以及判断为假,不需要再判断bool1的值 + bool1 = false && bool1 // false + fmt.Println(bool1) + // 同理||也是一样的,当遇到一个true时语句以及判断为真,不需要判断后半段的值 + bool1 = true || bool1 // true + fmt.Println(bool1) + + // 布尔值并不会隐式转换为数字值0或1,反之亦然。必须使用一个显式的if语句辅助转换: + i := 0 + b := true + if b { + i = 1 + } + fmt.Println(i) + + // 可以选择将其包装成一个函数 + // btoi returns 1 if b is true and 0 if false. + bToi := func(b bool) int { + if b { + return 1 + } + return 0 + } + fmt.Println(bToi(false)) // 0 + + // 数字到bool也可以转换 + // itob reports whether i is non-zero. + iTob := func(i int) bool { return i != 0 } + fmt.Println(iTob(1314)) // true + fmt.Println(iTob(0)) // false + +}