So at the suggestion of a colleague, I just tested the speed difference between the ternary operator and the equivalent If-Else block... and it seems that the ternary operat
You could also go completely branchless and measure if it makes any difference:
int m = -(i & 1); a = (b & m) | (c & ~m);
On today's architectures, this style of programming has grown a bit out of fashion.