hlsl语法条件表达式

hlsl syntax conditional expression

在书 "Programming Vertex, Geometry, and Pixel Shaders" 中有一个小的 hlsl 脚本,其中包含以下指令:

return (x != y != z);

这真的允许吗?这在语法上是否正确?这是什么意思?

return (x != y && y != z);?

(x != y != z)(x != y && y != z) 不同。一般来说, follows the same rules as 。在这种情况下,从左到右的规则适用于 != 运算符。假设值是整数,表达式 (x != y != z) 等效于以下内容:

int temp = (x != y); // true = 1, false = 0
int r = (temp != z); // true = 1, false = 0

因此,当且仅当 xy 相等且 z 不等于 0 时,表达式的计算结果为 1,或者如果 xy 不相等并且 z 不是 1.

如果值为 bool 或可以保证为 01,则表达式将简化为三项的逻辑异或 (xor)。