Деление на ноль без исключения ArithmeticException

Пытаясь написать правдивое, я попытался выяснить алгоритм, и я нашел тот, который работает. Однако теперь я не понимаю, почему он не выдает исключение ArithmeticException.

for(int i=0; i<Math.pow(2, numberOfInputs()); i++)
    {
        for(int j=0; j<numberOfInputs(); j++)
        {
            System.out.print("" + i/(int) Math.pow(2, j)%2 + "\t");

        }
        System.out.println("");
    }

При попытке сделать это с numberOfInputs(), возвращающим 2, я получаю:

Truthtable
0   0   
1   0   
0   1   
1   1   

Но я не понимаю, как это может быть, ведь Math.pow(2, j)%2 будет =0 несколько раз?!


person Simon Jenner    schedule 10.03.2019    source источник
comment
Посмотрите приоритет оператора Java.   -  person user202729    schedule 10.03.2019
comment
Код эквивалентен (i/2^j) % 2   -  person Minn    schedule 10.03.2019
comment
прекратите использовать Math.pow(2, j). Вместо этого используйте 1 << j   -  person phuclv    schedule 14.03.2020


Ответы (1)


Это из-за приоритета, это выполняется сначала: i/(int) Math.pow(2, j), затем по модулю. Первое выражение никогда не является делением на ноль. Подробнее об этом читайте в документации.

person Andronicus    schedule 10.03.2019