关于函数返回值的C语言基础题提问

What will be the final values of i and j in the following C code?

#include 
int x = 0;
int f()
{
    if (x == 0)
        return x + 1;
    else
        return x - 1;
}
int g()
{
    return x++;
}
int main()
{
    int i = (f() + g()) | g(); //bitwise or
    int j = g() | (f() + g()); //bitwise or
}

a) i value is 1 and j value is 1
b) i value is 0 and j value is 0
c) i value is 1 and j value is undefined
d) i and j value are undefined
为什么答案选c,不太懂 为什么 j 的值是未定义的

可能因为
f()=1 , g()=0 (此时x=1)所以 i 的 | 的左边为 (1+0)=1 ;右边g()=1 (此时x=2),所以 i=1 | 1=1即看成二进制 1与二进制 1的逻辑或;
然后进入第2行
g()=2 (此时x=3)即j左边是2,右边是f()=2,g()=3(此时x=4),所以右边是2+3=5,所以j=2 | 5 而这两个数不是二进制,但又不知道它是什么进制,所以无从知道其二进制,所以无法或???