1)論理演算子による代入がない理由は、和と差による代入ですか?なぜC/C++では論理演算子(&& =と|| =)による代入が欠けていますか?
bool a = true;
bool b = false;
a = a || b;
a ||= b; // syntax error!
a |= b; // OK.
2)ブール変数に対してビット単位の演算子を適用するの意味は何ですか? 論理演算子を使用するのと同じですか?
1)論理演算子による代入がない理由は、和と差による代入ですか?なぜC/C++では論理演算子(&& =と|| =)による代入が欠けていますか?
bool a = true;
bool b = false;
a = a || b;
a ||= b; // syntax error!
a |= b; // OK.
2)ブール変数に対してビット単位の演算子を適用するの意味は何ですか? 論理演算子を使用するのと同じですか?
a |= b
は、aのアドレスが1回だけ評価されることを除いて、a = (a | b)
と同じ意味です。その後、昇進の規則とboolへの割り当てのルールを調べます。
ブール演算子でビット演算子を使用できますか? – Sanich
C言語では、これらの複合文ではない有効な構文で
*= /= %= += -= <<= >>= &= ^= |=
||=
することができます。
Cのbool
は整数型です。 true
は1
であり、false
は0
である。ビット演算子はbool
に適用できます。
'|| ='と '&& ='は違法ですが、なぜ良い質問でしょうか。 – HolyBlackCat
@ M.M;うん。ただ考え出した。 – haccks
'bool'はそれ自身の型です。これは整数型ですが、 'int'と同じではありません。 –
&&=
と||=
がCから「欠落している」のは本当です.1つの理由は、Cの論理ANDとORが短絡を実行するということです。これは省略形で少し奇妙です。しかし、その代わりにビット単位の代入演算子を使用しないでください。代わりに、次のように書いてください:
a = a && b;
c = c || d;
標準的な真偽値(1と0)がある場合は、ビット演算子が動作します。しかし、5や2のような非正規の値に適用すると、異なる結果が得られます(5 & & 2は1ですが、5 & 2は0です)。
あなたの質問に言い換えてください。あなたの言うことがよくわかりません? – haccks
@haccks彼は複合ブール代入演算子がない理由を尋ねています。 '|| =' '&& =' – bolov
適切な質問をしてください。現在、なぜ「|| =」、「&& = 'etc」がないのか、あるいは「ブール変数にビット単位の演算子を適用するのはどういう意味ですか?」と質問するかどうかは不明です。 –