#cshap#operator

逻辑运算, 其操作数必须是 boolean 类型truefalse , 或者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 布尔值。下面是其真值表。

xyx&yx|y
tttt
tfft
ftft
ftff
nulltnulltrue
nullffnull
tnullnullt
fnullfnull
nullnullnullnull

!^ 也支持 bool? 作为操作数, 其运算结果均为 null。

符合赋值

形如 x op= y 被称为符合赋值, op 为逻辑运算符, 其等价于 x = x op y&|^ 支持符合赋值