IntelliJ Idea v. Community – kompromitujący błąd

Błąd dotyczy wersji przedstawionej na Rys. 134:


Rys. 134. Wersja IntelliJ Idea v. Community

Po uruchomieniu Analyze/Inspect Code dla klasy przedstawionej poniżej:

package binaryerror;
public class Binary11 {
    public static void main(String[] args) {
        int a = 104;
        if ((a & 1) == 0) {
            System.out.print("liczba " + a + " jest parzysta");
        } else {
            System.out.print("Liczba " + a + " jest nieparzysta");
        }
    }
}

pojawia się ostrzeżenie (Rys. 135):


Rys. 135. Zrzut informacji o błędzie

He, he, he. Oczywiście, że nie!
Na ostatniej pozycji liczby wyrażonej w postaci binarnej może wystąpić albo 0 albo 20 czyli 1. Jeżeli występuje 1 liczba jest nieparzysta. Jeżeli występuje 0 – liczba jest parzysta.
Jeżeli w podanym przykładzie a równa się 1 wynik będzie 1, a wynikiem porównania będzie false. Liczba jest nieparzysta. Jeżeli a równa się 0, wynik będzie 0, porównanie zwróci true. Liczba jest parzysta.
Po uruchomieniu kodu klasy dla a = 103 otrzymamy informację, że liczba jest nieparzysta,
a dla a = 104, komunikat, że liczba jest parzysta.
Nawias jest konieczny ze względu na priorytet operatorów.
Szokujące nie jest to, że istnieje błąd, ale to, że przez kilka lat nikt tego nie zauważył.
“Tu człowiek nie wystarczy. Tu potrzeba psa.”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *