16

奇妙な質問ですが、誰かが私にこれを見せてくれました。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;
}
4

5 に答える 5

26

はい。整数型の場合、オペランドがゼロの場合は!戻り、それ以外の場合は戻ります。truefalse

したがって、!bここでは単に を意味しb == 0ます。


これは、値が に変換される特定のケースboolです。は、 の「真実」とは何かという問題と!b見なすことができます。C++ では、算術型、ポインター型、および列挙型を に変換できます。値が 0 または null の場合、結果はになり、それ以外の場合は(C++ §4.1.2) になります。!((bool)b)bboolfalsetrue

もちろん、カスタム クラスは、operator!またはoperator<型を bool に変換できます> をオーバーロードして!b、それらのクラスの たとえば、failbit をチェックするためにandをstd::streamオーバーロードしているため、イディオムは次のようになります。operator!operator void*

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

に使える。

(しかし、あなたのコード!( a > b && b <= c) || a > c && !bは暗号化されています。)

于 2010-11-08T11:56:14.050 に答える
7

元々、C (C++ のベース) にはブール型はありませんでした。代わりに、値「true」がゼロ以外の値に割り当てられ、値「false」がゼロに評価されるものに割り当てられました。この動作は C++ にも存在します。したがって、 のint x場合、式!xは「x真ではxない」、つまり「非ゼロ」を意味します。つまり、xがゼロの場合は真です。

于 2010-11-08T11:59:51.133 に答える
5

!b同等(b == 0)です。

于 2010-11-08T11:56:48.187 に答える
3

組み込み!演算子は、その引数を に変換しますbool。標準では、任意の算術型 ( , ,.... , ...) から boolへの変換が存在するintcharfloatdoubleことが指定されています。ソース値が 0 の場合、結果はtrue、それ以外の場合はfalse

于 2010-11-08T11:58:04.777 に答える
3

int のテストは、ゼロ以外の値の場合は真、ゼロ値の場合は偽であるため、not はゼロ値の場合は真であり、ゼロ以外の値の場合は偽です。

于 2010-11-08T11:56:36.037 に答える