2013-10-23 4 views
11

、この表現は、コンパイル、および実行したときに、testが印刷されますされます:なぜこのブール値はJavaではなくC++でコンパイルされますか? C++で

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

が、Javaでは、これはコンパイルされません。

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

、代わりに括弧が必要です:

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

1 >= 0が真であり、NOTが真であるため、testは印刷されません。偽です。

なぜ文は偽であっても、Javaではなく、C++でtestをコンパイルして出力するのはなぜですか?

ありがとうございました。

答えて

22

これは、!1がC++では有効ですが、Javaでは無効であるために発生します。。

どちらの言語も、(C +とJavaの両方で)!>=よりも高い優先度を持つため、!1>=0(!1)>=0と解析します。

だから、(C++で)、(!1)>=0 - >0>=0 - >trueが、(Javaで)!1は(!int)型エラーです。しかしながら

(C++またはJavaのいずれかで)、!(1>=0) - >!(true) - >false


のJava のみbooleanタイプ上!演算子を定義します。

6

java単項演算子では、!は条件演算子>=よりも高い優先度を持ちます。それはかっこが必要な理由()

Hereは、Javaの演算子優先順位の詳細テーブルです。

ただし、条件のC++陽性値はboolean trueという値を参照してください。したがって、if(!1>=0)はC++では有効ですが、Javaでは無効です。 Javaの場合、booleanの値はtruefalseです。それは正の価値を真実として扱うことはありません。

+6

C++では、 '! '演算子も'> = 'より高い優先度を持ちます。 – qwertyuiop5040

+3

正の値だけでなく、負の値も真です。唯一の真でない値は0です。 –

関連する問題