(x != y != z)
与(x != y && y != z)
不同。通常,hlsl遵循与c相同的规则。在这种情况下,从左到右的规则适用于!=
运算符。假设值是整数,表达式(x != y != z)
等效于以下内容:
int temp = (x != y); // true = 1, false = 0
int r = (temp != z); // true = 1, false = 0
因此,当且仅当1
和x
相等并且y
不是z
时,表达式才会评估为0
,或者x
和y
不相等,z
不是1
。
如果值为bool
s或可以保证为0
或1
,则表达式将减少为三个术语的逻辑异或 - (xor)。