2017-12-11 6 views
-4
#include<iostream> 
using namespace std; 

int main() 
{ 

    int a=10,b=5,c=3; 
    b!=!a; 
    c=!!a; 
    cout<< b<<" "<< c<< "\n"; 
    return 0; 
} 



The output is: 
5 1. 
+0

あなたはどこにいらっしゃいましたか? – StoryTeller

+3

'b!=!a'はほとんど何もしません(おそらくコンパイラによって投げ捨てられました)。そして、' c = !! a'は 'a'を2回実行しません(基本的に真偽値に変換します; 、それは1)、それを 'c 'に割り当てます。 – Yashas

+0

それはそこにないので、あなたは論理を得ていません。 – Slava

答えて

1

b!=!a発現がfalseに評価b != (!a)

のように書くことができます。

結果がどこにも格納されないため、コンパイラはこのラインを最適化する可能性が非常に高いです。あなたは与える:


c=!!aは、(任意の非ゼロの数が0でないのと)と第二!は以前の結果、すなわち上でない最初の!aはあなたにfalseを与えるc = !(!a)

のように記述することができますtrue。この値はcになります。変数abc

内容11aが変更されなかった)、5bはいずれか変更されていない)と1!!aの結果)です。

0

b!=!a;は、b != !aと読み替えられます。これは単なる比較であり、割り当てを行いません。 c=!!a;c = !(!a)になります。 !afalseと解釈されます。 1は単にtrueを意味します。

関連する問題