Почему этот логический компилировать в С++, а не в Java?

В С++ это выражение будет скомпилировано, а при запуске будет напечатано test:

    if(!1 >= 0) cout<<"test";

но в Java это не будет компилироваться:

    if(!1 >= 0) System.out.println("test");

и вместо этого нужны скобки:

    if(!(1>=0)) System.out.println("test");

но test не будет печатать, так как 1 >= 0 - true, а NOT true - false.

Итак, зачем он компилирует AND распечатывает test в С++, хотя утверждение является ложным, но не в Java?

Спасибо за вашу помощь.

Ответ 1

Это происходит потому, что !1 действителен в С++, но не в Java 1.

Оба языка анализируют !1>=0 как (!1)>=0, потому что (как в C +, так и в Java) ! имеет более высокий приоритет, чем >=.

Итак (в С++), (!1)>=00>=0true, но (в Java) !1 (!int) - ошибка типа.

Однако (в С++ или Java), !(1>=0)!(true)false.


1 Java определяет только оператор ! по типу boolean.

Ответ 2

В java унарный оператор ! имеет высокий приоритет, чем условный оператор >=. Для этого ему нужна скобка ().

Здесь - таблица сведений о приоритете операторов Java.

Но в С++ положительное значение в состоянии относится к значению boolean true. Таким образом, if(!1>=0) действителен в С++, но недействителен в Java. В Java значение boolean - это только true и false. Он никогда не считает положительное значение истинным.