逻辑运算, 其操作数必须是 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
。&|^
支持符合赋值