[quote=geovanni.]O resultado foi o mesmo , mas o porque de funcionar se era uma verificação bit-a-bit!?
Estou com essa questão , foi coincidência ou esta correto!?[/quote]
Coincidência coisa nenhuma. O seu teste está incompleto. Rode o teste abaixo.
class TesteOr {
public static void teste (int arg0, int arg1, int arg2, int arg3) {
System.out.printf ("arg0 = %d, arg1 = %d, arg2 = %d, arg3 = %d %n", arg0, arg1, arg2, arg3);
if ((arg0 | arg1 | arg2 | arg3) >= 0) {
System.out.println ("A) Pelo menos um dos argumentos eh maior ou igual a zero");
}
System.out.println ("O valor de arg0|arg1|arg2|arg3 eh " + (arg0 | arg1 | arg2 | arg3));
if (arg0 >= 0 || arg1 >= 0 || arg2 >= 0 || arg2 >= 0) {
System.out.println ("B) Pelo menos um dos argumentos eh maior ou igual a zero");
}
System.out.println ();
}
public static void main (String[] args) {
teste (-1, 0, 0, 0);
teste (-1, 3, 0, 0);
teste (0, 0, 0, 0);
teste (10, 20, 30, 40);
teste (-1, -2, -3, -4);
}
}
Se as expressões fossem equivalentes, para cada conjunto de números, deveria aparecer para todos os casos "A) Pelo menos um dos argumentos eh maior ou igual a zero" e "B) Pelo menos um dos argumentos eh maior ou igual a zero". Mas não é isso que acontece.
arg0 = -1, arg1 = 0, arg2 = 0, arg3 = 0
O valor de arg0|arg1|arg2|arg3 eh -1
B) Pelo menos um dos argumentos eh maior ou igual a zero
arg0 = -1, arg1 = 3, arg2 = 0, arg3 = 0
O valor de arg0|arg1|arg2|arg3 eh -1
B) Pelo menos um dos argumentos eh maior ou igual a zero
arg0 = 0, arg1 = 0, arg2 = 0, arg3 = 0
A) Pelo menos um dos argumentos eh maior ou igual a zero
O valor de arg0|arg1|arg2|arg3 eh 0
B) Pelo menos um dos argumentos eh maior ou igual a zero
arg0 = 10, arg1 = 20, arg2 = 30, arg3 = 40
A) Pelo menos um dos argumentos eh maior ou igual a zero
O valor de arg0|arg1|arg2|arg3 eh 62
B) Pelo menos um dos argumentos eh maior ou igual a zero
arg0 = -1, arg1 = -2, arg2 = -3, arg3 = -4
O valor de arg0|arg1|arg2|arg3 eh -1