質問

奇妙な質問ですが、誰かが私にこれを見せてくれました。 C ++のINTのオペレーター? (私にとっては奇妙です)。

#include <iostream>
using namespace std;

int main()
{
   int a=5, b=4, c=4, d;
   d = !( a > b && b <= c) || a > c && !b;
   cout << d;
   system ("pause");
   return 0;
}
役に立ちましたか?

解決

はい。積分タイプの場合、 ! 戻り値 true オペランドがゼロの場合 false そうでなければ。

それで !b ここにあるだけです b == 0.


これは、値が bool. 。 !b と見ることができます !((bool)b) だから問題は、 b. 。 C ++では、算術タイプ、ポインタータイプ、および列挙をに変換できます bool. 。値が0またはnullの場合、結果は false, 、そうでなければそうです true (C ++§4.1.2)。

もちろん、カスタムクラスはオーバーロードすることもできます operator! また operator<タイプはブールに変換できます>許可する !b 彼らのクラスのために。例えば、 std::stream 過負荷になっています operator!operator void* Idiomsが好きなように、Failbitをチェックするために

while (std::cin >> x) {   // <-- conversion to bool needed here
  ...

に使える。

(しかし、あなたのコード !( a > b && b <= c) || a > c && !b 不可解です。)

他のヒント

もともと、C(C ++のベース)では、ブール型はありませんでした。代わりに、値「true」はゼロ以外の値に割り当てられ、値「false」はゼロに評価されるものに割り当てられました。この動作はまだC ++に存在します。だから int x, 、表現 !x 意味 "x 真実ではない」、それは「x ゼロではない」、つまり、それは本当です x ゼロです。

あなたはできる、 !b に相当します (b == 0).

INTのテストは非ゼロ値ではTRUE、ゼロ値の場合はfalseであるため、ゼロ値では単なるゼロ値では、ゼロ以外の値の場合はfalseではありません。

ビルドイン ! オペレーターはその議論を変換します bool. 。標準はそれを指定します 任意の算術タイプからの変換が存在します(int, char,.... float, double...)ブールに. 。ソース値が0の場合、結果は次のとおりです true, 、そうでなければそうです false

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top