INT値でC ++でNOTオペレーターを使用できますか?
-
29-09-2019 - |
質問
奇妙な質問ですが、誰かが私にこれを見せてくれました。 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