ピン設定のずばりこの意味を教えて下さい。
|= ,&=
自分なりに調べましたが、よくわかりません。
よろしくどうぞ。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
回答4件
0
a |= b は a = a | b と__aの評価が1回だけであることを除き__全く同一です。
同じく
a &= b は a = a & b と__aの評価が1回だけであることを除き__全く同一です。
これらは**複合代入演算子(compound assignment)**と呼ばれる物で、他にも仲間達がいます。下記ページの表が参考になるでしょう。
Assignment operators - cppreference.com
なお、C言語のみではなく、他の言語でも似たような物を持っています(ただし、全てではありませんし、組み合わせも言語によって異なります)。
さて、注意点が2つほどあります。
a |= bとa = a | bではaの評価回数が異なる(前者が1回に対して、後者は2回)。
つまり、左辺に副作用がある場合は違う結果になるということです。普通の代入演算子を含め、左辺に副作用がある式(++iとかのこと)を書くことはあまりない(というよりバグの温床になるため避けるべき)ですが、評価の回数については注意が必要です。- C++では
operator|=()やoperator&=()といった一つの演算子として扱われ、オーバーロードにより、型によって異なる動きになる場合がある。
C++はCを拡張した言語のため、Cと同じだと思うと痛い目を見る箇所の一つです。標準で用意されている型については同じになるように実装されていますが、ユーザー定義の型(クラス)の場合はそうである保証はありません。ただ、想定される動作と異なる実装すること自体が良くないクラスの作り方とも言えます。
投稿2016/04/30 12:37
編集2016/04/30 13:18総合スコア21840
0
JIS X3010には
意味規則 形式 E1 op= E2 の複合代入は(中略) E1 = E1 op ( E2) と同じ
と書いてあります。つまり、
x |= y は x = x | y と同じ
ということです。
こういう類の疑問は規格書(文法書)を見るのが、早くて正確です
投稿2016/04/30 12:29
総合スコア711
0
複合代入といって、演算と代入を一度で行なってしまいます。たとえば、a &= b;であれば、意味的にはa = a & b;と同じです。
投稿2016/04/30 12:26
総合スコア147001
0
ベストアンサー
ピン設定のずばりこの意味を教えて下さい。
|= ,&=
|, &はビット演算子ですね。
|はOR、&はAND。
ORはどちらかが立っていれば立てる。
ANDは両方が立っていれば立てる。
|=とかなってるのは、+=とかと同じで、
a |= b ならば、a = a | b と同義です。
a=1010, b=0000として
a = a & b をするとaは必ず0000になるので、ピン設定がクリアできます。
a=1010, b=0001として
a = a | b をすると1011が返ってきます。つまり値が合成できてますね。
if((a & b) != 0) とかすれば、そのビットが立っているか
確認できます。
ビット演算子を使うとメモリは節約できてよいですけど
個人的に可読性が低いので嫌いです。
投稿2016/05/03 06:46
編集2016/05/03 06:48総合スコア223
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
2016/04/30 13:31