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)
不同。一般来说,hlsl follows the same rules as c。在这种情况下,从左到右的规则适用于 !=
运算符。假设值是整数,表达式 (x != y != z)
等效于以下内容:
int temp = (x != y); // true = 1, false = 0
int r = (temp != z); // true = 1, false = 0
因此,当且仅当 x
和 y
相等且 z
不等于 0
时,表达式的计算结果为 1
,或者如果 x
和 y
不相等并且 z
不是 1
.
如果值为 bool
或可以保证为 0
或 1
,则表达式将简化为三项的逻辑异或 (xor)。
在书 "Programming Vertex, Geometry, and Pixel Shaders" 中有一个小的 hlsl 脚本,其中包含以下指令:
return (x != y != z);
这真的允许吗?这在语法上是否正确?这是什么意思?
return (x != y && y != z);?
(x != y != z)
与 (x != y && y != z)
不同。一般来说,hlsl follows the same rules as c。在这种情况下,从左到右的规则适用于 !=
运算符。假设值是整数,表达式 (x != y != z)
等效于以下内容:
int temp = (x != y); // true = 1, false = 0
int r = (temp != z); // true = 1, false = 0
因此,当且仅当 x
和 y
相等且 z
不等于 0
时,表达式的计算结果为 1
,或者如果 x
和 y
不相等并且 z
不是 1
.
如果值为 bool
或可以保证为 0
或 1
,则表达式将简化为三项的逻辑异或 (xor)。