Вы не передаете никаких операторов, я упрощу ваш код, чтобы показать это
Для первой части,
int nn = 0;
int a = test(1, 1 | (2 ? nn : 0), 1); // test(1, 1 | 0, 1)
Упрощение последней строки приводит к
int a = test(1, 1 | (2 ? 0 : 0), 1); // (1)
int a = test(1, 1 | 0, 1); // (2)
int a = test(1, 1, 1); // (3)
int a = 3;
для второй части,
n = 1;
a = test(1, 1 | (2 ? n : 0), 1); // test(1, 1 | 2, 1)
Упрощение последней строки приводит к
int a = test(1, 1 | (2 ? 1 : 0), 1); // (1)
int a = test(1, 1 | 1, 1); // (2)
int a = test(1, 1, 1); // (3)
int a = 3;