サンプルプログラムを見たら見たことない書き方をしたところがありました。
以下のコードはそれをまねて書いたものです。
質問なのですが、
第二引数はどのような意味でしょうか・
ご指導お願いします。
c++でif文が省略された(?)引数
Re: c++でif文が省略された(?)引数
(b == 0)・・・bが0の時にTRUE(1)になる。それ以外はFALSE(0)。
(b == 3)・・・bが3の時にTRUE(1)になる。それ以外はFALSE(0)。
int a = 0 , b = 0;
とあり、bは0なので、
(b == 0)→1
(b == 3)→0
なので、上記は「1|0」と同等の結果になると言えるため、
(b == 0) | (b == 3)
は1になると思います。
(b == 3)・・・bが3の時にTRUE(1)になる。それ以外はFALSE(0)。
int a = 0 , b = 0;
とあり、bは0なので、
(b == 0)→1
(b == 3)→0
なので、上記は「1|0」と同等の結果になると言えるため、
(b == 0) | (b == 3)
は1になると思います。
Re: c++でif文が省略された(?)引数
C++では、比較演算子の結果は整数ではなく、bool型のtrueまたはfalseです。 (N3337 5.9, 5.10)MEMO A さんが書きました:(b == 0)・・・bが0の時にTRUE(1)になる。それ以外はFALSE(0)。
(b == 3)・・・bが3の時にTRUE(1)になる。それ以外はFALSE(0)。
ビットOR演算子は整数(かunscoped enumeration : enum classやenum structではなくenumで宣言された列挙型)でないといけない(N3337 5.13)ので、
この場合bool型のオペランドがint型に変換されて計算されるのだと思います。
boolからintの変換は、falseが0に、trueが1に変換されます。(N3337 4.7)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: c++でif文が省略された(?)引数
ifが省略されたわけではないです。
bool型に|演算子を使うのは珍しいですが……。
|演算子 : 式「(b == 0) | (b == 3)」は式「(b == 0)」の結果と式「(b == 3)」の結果のビットごとの論理和を計算します。
==演算子 : 式「b == 0」はbが0に等しければtrueを,そうでなければfalseを式の値にします。
==演算子 : 式「b == 3」はbが3に等しければtrueを,そうでなければfalseを式の値にします。
さて,面倒なことに|演算子を使っているため,|演算子の両辺がint型に変換されます。
この時,trueは1に,falseは0になります。
そして,それらのビットごとの論理和を取るため,結果として,「bが0か3であれば式の値は1,そうでなければ0」となります。
ちなみ,||演算子を使っていた場合,両辺がbool型に変換される(今回の場合は元々bool型なので変換はない)ので,「bが0か3であれば式の値はtrue,そうでなければfalse」となります。
bool型に|演算子を使うのは珍しいですが……。
|演算子 : 式「(b == 0) | (b == 3)」は式「(b == 0)」の結果と式「(b == 3)」の結果のビットごとの論理和を計算します。
==演算子 : 式「b == 0」はbが0に等しければtrueを,そうでなければfalseを式の値にします。
==演算子 : 式「b == 3」はbが3に等しければtrueを,そうでなければfalseを式の値にします。
さて,面倒なことに|演算子を使っているため,|演算子の両辺がint型に変換されます。
この時,trueは1に,falseは0になります。
そして,それらのビットごとの論理和を取るため,結果として,「bが0か3であれば式の値は1,そうでなければ0」となります。
ちなみ,||演算子を使っていた場合,両辺がbool型に変換される(今回の場合は元々bool型なので変換はない)ので,「bが0か3であれば式の値はtrue,そうでなければfalse」となります。
Re: c++でif文が省略された(?)引数
みけCATさんYuOさんありがとうございます。
論理和の演算をしているためint型になっているということですね。理解しました(c++むつかしい・・・)
論理和の演算をしているためint型になっているということですね。理解しました(c++むつかしい・・・)