Я не могу понять, в чем разница между следующими частями кода:
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==0)
чей результат всегда ложен. затем ANDs
это с результатом функции __double2int_rd
,
Поэтому он на самом деле оценивает:
if(__double2int_rd(pos.x/params.cellSize.x*2.0) & 0)
Который всегда будет ложным.
Эквивалентом первого выражения будет:
if((__double2int_rd(pos.x/params.cellSize.x*2.0) & 1) == 0)
Следите за скобками.
Хорошей практикой программирования является добавление скобок, если вы не уверены в порядке вычисления выражений.
Других решений пока нет …