奇妙な質問ですが、誰かが私にこれを見せてくれました。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;
}
奇妙な質問ですが、誰かが私にこれを見せてくれました。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
見なすことができます。C++ では、算術型、ポインター型、および列挙型を に変換できます。値が 0 または null の場合、結果はになり、それ以外の場合は(C++ §4.1.2) になります。!((bool)b)
b
bool
false
true
もちろん、カスタム クラスは、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
は暗号化されています。)
元々、C (C++ のベース) にはブール型はありませんでした。代わりに、値「true」がゼロ以外の値に割り当てられ、値「false」がゼロに評価されるものに割り当てられました。この動作は C++ にも存在します。したがって、 のint x
場合、式!x
は「x
真ではx
ない」、つまり「非ゼロ」を意味します。つまり、x
がゼロの場合は真です。
と!b
同等(b == 0)
です。
組み込み!
演算子は、その引数を に変換しますbool
。標準では、任意の算術型 ( , ,.... , ...) から boolへの変換が存在するint
char
float
double
ことが指定されています。ソース値が 0 の場合、結果はtrue
、それ以外の場合はfalse
int のテストは、ゼロ以外の値の場合は真、ゼロ値の場合は偽であるため、not はゼロ値の場合は真であり、ゼロ以外の値の場合は偽です。