逻辑运算, 其操作数必须是 boolean 类型true , false , 或者null, 或者某个表达式, 某个函数的返回值, 要求表达式运算结果和返回结果为 boolean 类型。例如:
bool a = true
bool a = false
bool a = !true
bool a = false & true
bool a = false | null
bool a = true | (10>1)
bool a = true | isMax(10) //isMax(10) 返回 true运算符有 ! 、& 、| 、^ 、&& 、||, 分别对应 非、与、或、异或, 其中 与或分单双两种形式, 其区别后文会具体介绍。
单双与或区别
单与或& | 没有短路特性, 同时支持三值逻辑, 复合赋值。双与或也叫条件逻辑, 逻辑运算遵循短路特性, 不支持复合赋值。
短路特性
逻辑运算符左侧的真值足以确定整个表达式的真值, 则右侧真值无需被计算, 这种特性被称为短路特性。短路特性具有传递性。
a&&b&&c 如果 a 为 false,则 b 和 c 的真值无需计算,也即是 b, c 不会被执行
a||c||b 如果 a 为 ture 则有类似特性三值逻辑
单与或支持可为 null 的布尔操作数, 其运算结果除了为 ture 、false, 还可为 null, 故而得名三值逻辑。使用 bool? 定义一个可为 null 布尔值。下面是其真值表。
| x | y | x&y | x|y |
|---|---|---|---|
| t | t | t | t |
| t | f | f | t |
| f | t | f | t |
| f | t | f | f |
| null | t | null | true |
| null | f | f | null |
| t | null | null | t |
| f | null | f | null |
| null | null | null | null |
! 和 ^ 也支持 bool? 作为操作数, 其运算结果均为 null。
符合赋值
形如 x op= y 被称为符合赋值, op 为逻辑运算符, 其等价于 x = x op y。&|^ 支持符合赋值