int i = 0, j = 1;
if((i == 0) || (j/i == 1)) -> primeira condição já retorna true e não testa a segunda, portanto como não teste a segunda condição não vai dar a exception
if((i == 0) | (j/i == 1)) -> o operador | vai testar necessariamente as duas condições. Ao testar a segunda condição vai dar erro por causa da divisão por zero
if((i != 0) && (j/i == 1)) -> a primeira condição já retorna false e não testa a segunda, portanto como não teste a segunda condição não vai dar a exception
if((i != 0) & (j/i == 1)) -> o a segunda condição vai ser testada mesmo a primeira sendo false por causa o operador &. Ao testar a segunda condição vai dar erro por causa da divisão por zero
é isso mesmo que acontece???