在CUDA中使用固有类型转换出现奇怪错误

3

我无法弄清以下代码片段之间的区别:

int t = __double2int_rd(pos.x/params.cellSize.x*2.0)&1;
if( t ==0) {...}

并且

if(__double2int_rd(pos.x/params.cellSize.x*2.0)&1 == 0) {...}

第二个选项永远不会返回true,而第一个选项则表现正常。
有人有任何想法吗?
1个回答

2
第二个表达式首先评估结果始终为false的(1==0)。然后与函数__double2int_rd的结果进行AND运算。
因此,它实际上评估:
if(__double2int_rd(pos.x/params.cellSize.x*2.0) & 0)
这将始终为false。
第一个表达式的等价物将是:
if((__double2int_rd(pos.x/params.cellSize.x*2.0) & 1) == 0)
请注意括号。如果您不确定表达式的评估顺序,添加括号是一个好的编程习惯。

谢谢!我绝对没有想到 == 的优先级比 & 高。 - user1833446
第一次在Stack Overflow上提问,很抱歉迟迟没有接受答案。我之所以提出这个问题,是因为我非常担心内置函数可能会以某种奇怪的方式运行。当然,逻辑AND和位AND完全是相同的东西-我真是太傻了! - user1833446

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接