論理演算について質問

このQ&Aのポイント
  • 論理演算子について質問しました。'&&'や'||'などの論理演算子は、2つのboolean型のオペランドに対して演算するのでしょうか?答えはYESです。
  • また、括弧を用いることにより、演算子の結合順を変えることもできます。
  • 結合順とは、ある演算子がオペランドを結合し、その括弧内の両側のオペランドをつなぐことです。
回答を見る
  • ベストアンサー

論理演算について質問

今度こそ最後にします、、 質問:&&や||等の論理演算子は、「その両側にある2つの型booleanのオペランドに対して論理演算する」こういうことでしょうか? YESかNOでお答えいただいた上で、補足があればお願いします^^ 質問2:私は、括弧内の式が優先的に計算されると思って、その旨の質問をしたところ以下のような回答が返ってきました。 「優先されるのは結合順であって、評価順序ではないです。例えば、a==1 && b==3 || a==1 && b==0の式ににかっこを追加して、a==1 && (b==3 || a==1) && b==0とすると||の第1オペランドは b==3、第2オペランドは a==1 に変わります。」 ここでいう「結合順」の「結合」とはどういう意味ですか? 私の仮説では、「ある演算子がオペランドを結合している」、こういうことでしょうか? そして、括弧を用いることにより、ある演算子のオペランドの結合を変化させ、演算子は その括弧内の両側のオペランドをつなぐ、こういうことでしょうか? YESかNOかでお答えください。その上で何か補足があればお願いします^^

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

質問1: 「オペランドに対して論理演算する」という文の意味が曖昧なので回答不能です。 && や || でなく、& や | についてなら、YESかな。 A && B は、Aを評価して真ならBを評価してBの結果を値とします。Aが偽ならBを評価せず結果は偽。 A || B は、Aを評価して偽ならBを評価してBの結果を値とします。Aが真ならBを評価せず結果は真。 質問2: 評価順序と結合順について。 評価順序については、各被演算項が副作用を伴うメソッド呼び出しであるケースを考えると理解出来るかと思います。下記の出力結果を予想してから実行してみてください。 public static boolean t(int x) { System.out.println("t("+x+") is called."); return true; } public static boolean f(int x) { System.out.println("f("+x+") is called."); return false; } public static void main (String[] args) { System.out.println( ( t(1) | f(2) ) & f(3) ); System.out.println( t(1) | ( f(2) & f(3) ) ); } 各被演算項の評価順序と、どの二項演算が先に行われるかは、無関係です。 >「ある演算子がオペランドを結合している」、こういうことでしょうか? 答えはYESかな。

wantanton
質問者

お礼

丁重なご回答ありがとうございます^^ 参考になります

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

論理演算子はショートカット演算をするので, 数学的な操作とは必ずしも一致しません. 上の質問であなたが聞いているので「数学的な操作」ですか? それとも, 「Java における実際の動作」ですか? 下の質問については日本語の意味がよくわからんのでパス. いずれにしても, 言語仕様は見た?

wantanton
質問者

お礼

丁重なご回答ありがとうございます! 言語仕様書見ましたが、難しすぎてちんぷんかんぷんです、、

関連するQ&A

  • 論理演算について質問

    何度もすみません。 また質問します。これで最後にしたい、、 質問1:&&や||等の論理演算子は、その両側にある2つの“boolean型の式(関係式等)”に対して論理演算を行う。 評価は、両側の式に対して並列に行うのではなく、1つづつ行って行く。 因みに、||は「論理式」を論理演算するこどができる。例えば、 int a=1,b=0,c=0のとき a==1 && b==3 || a==1 && b==0 の論理式があったとします。 この論理式の||は、即に演算されたa==1 && b==3とa==1 && b==0の論理式を演算の対象としている。 質問2:「評価」と「論理演算」って意味は同じですか?違いますか?違うならその違いは? 質問3:a==1 && b==0 || (a==1 && b==0)の論理式は、先に(a==1 && b==0)の論理式を論理演算すると思ってました。でも、以前そのような仮説をもって質問したら、回答者の方に実際違うと指摘されました。何故ですか?だって()の中の論理式なんだから、優先的に演算されるはず。

    • ベストアンサー
    • Java
  • 論理演算について質問

    int a=1,b=0,c=0のとき a==1 && b==0 || (a==1 && b==0) の論理式あったとします 質問1:&&や||の論理演算子について、その『両側』にある2つの関係式を「1つ1つ評価」することにより論理演算する。この認識で正しいですか? 質問2:論理式 a==1 && b==0 || (a==1 && b==0)について、trueになるプロセスの認識は以下で正しいですか? (a==1 && b==0)のa==1を評価しtrue、次にb==0を評価しtrue。 よってこの論理式はtrue      ↓ a==1 && b==0 のa==1 を評価しtrue、b==0 を評価しtrue。 よってこの論理式はtrue      ↓ ||は、右の論理式((a==1 && b==0))がtrueで左の論理式(a==1 && b==0 )もtrueだから、論理式全体はtrueで確定しているので、評価を行わない。

    • ベストアンサー
    • Java
  • 優先順位の概念について質問

    質問1:優先順位や結合の規則とは、本質的に「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」であり、「演算実行の優先順位」ではありませんよね? 何故そう思ったかというと次の論理式をご覧ください。 a==1 && b==0 || a==1 && b==0 ※int a==1,b==0 この論理式がtureになるプロセスとして、 a==1を評価→true    ↓ b==0を評価→true ↓ &&は、a==1 && b==0の論理式をtrueと評価 ↓ ||は、左側の論理式a==1 && b==0がtrueだから、論理式全体がtrueだと判断し、 右側の論理式の評価を行わない。 プロセスとして、こうだと思うんですけど、優先順位として||は&&より低いですよね? 優先順位が「演算実行の優先順位」を意味するならば、右側の論理式のa==1 && b==0を評価してから||の演算をするはずで矛盾します。 よって、優先順位とは本質的に、「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」であり、「演算実行の優先順位ではない」といえる。 質問2:「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」であれば、例えば、上記の論理式の左側を例に挙げていえば、 b==0は&&と||の2つが共有してるが、&&の方が優先順位が高いから、b==0を先に結び付けてる、その意味でも「優先順位の高い演算子ほど、オペランドをより先に結び付けられる」 は正しいですか?

    • ベストアンサー
    • Java
  • 論理演算について質問

    int a=1,b=0,c=0のとき a==1 && b==0 || (a==1 && b==0) a==1 && b==0 &&c==0 && b==0 の2つの論理式あったとします 質問1:&&や||は、その間にある2つの関係式や2つの関係式の論理演算の結果同士などを論理演算するものだと思います。この認識で正しいですか? 質問2:上記の論理式の後者a==1 && b==0 &&c==0 && b==0について、trueになるプロセスの認識は以下で正しいですか? a==1 && b==0 はtrue       ↓  左から2番目の&&は、左の論理式(a==1 && b==0)の演算結果であるtrueと関係式c==0を論理演算(つまり、論理演算の結果trueと関係式の2つを演算)、、結果true ↓ 左から3番目の&&は、左の論理式(a==1 && b==0 &&c==0 )の演算結果であるtrueと右の関係式b==0を論理演算(つまり、論理演算の結果trueと関係式の2つを演算)、結果true 質問3:上記前者の論理式a==1 && b==0 || (a==1 && b==0)について、trueになるプロセスの認識は以下で正しいですか? (a==1 && b==0)はtrue      ↓ a==1 && b==0 はtrue      ↓ ||は、右の論理式((a==1 && b==0))の演算の結果trueと左の論理式(a==1 && b==0)の演算結果trueを計算し(つまり論理演算の結果同士であるtrue2つを演算)、結果true

    • ベストアンサー
    • Java
  • 論理演算について質問

    最初に、前回同じ質問に答えてくださった方へ、いろいろな人から僕の仮説のコンセンサスを得たいので、再度同じ質問しますね。 int a=1,b=0,c=0のとき a==1 && b==0 | (a==1 && b==0) a==1 && b==0 &&c==0 && b==0 の2つの論理式あったとします 質問1:&&や||は、その間にある2つの関係式や2つの関係式の論理演算の結果同士などを論理演算するものだと思います。この認識で正しいですか? 質問2:上記の論理式の後者a==1 && b==0 &&c==0 && b==0について、trueになるプロセスの認識は以下で正しいですか? a==1 && b==0 はtrue       ↓  左から2番目の&&は、左の論理式(a==1 && b==0)の演算結果であるtrueと関係式c==0を論理演算(つまり、論理演算の結果trueと関係式の2つを演算)、、結果true ↓ 左から3番目の&&は、左の論理式(a==1 && b==0 &&c==0 )の演算結果であるtrueと右の関係式b==0を論理演算(つまり、論理演算の結果trueと関係式の2つを演算)、結果true 質問3:前者の論理式、a==1 && b==0 | (a==1 && b==0)について、trueになるプロセスの認識は以下で正しいですか? (a==1 && b==0)はtrue      ↓ a==1 && b==0 はtrue      ↓ |は、右の論理式((a==1 && b==0))の演算の結果trueと左の論理式(a==1 && b==0)の演算結果trueを計算し(つまり論理演算の結果同士であるtrue2つを演算)、結果true

    • ベストアンサー
    • Java
  • 論理演算子の関係式を結ぶ個数について質問

    int a=1,b=0,c=0のとき a==0 && (b==0 || c==0) a==0 && b==0 || c==0 の2つの論理式あったとします 質問1:前者の論理式の論理演算子である&&は、a==0と(b==0 || c==0)をつないでるイメージですか? 質問2:後者のa==0 && b==0 || c==0の論理式の||は、a==0 && b==0とc==0をつないでるイメージですか? 質問3:論理演算子は、その論理演算子からみて左方向にある関係式全てと右にある 関係式1つを結ぶものですか?ただし、()の中に複数の関係式がある場合、その複数の関係式を1括りにしていい。(例えば質問1の前者の例)

    • ベストアンサー
    • Java
  • 論理演算子の変数等を結ぶ個数について質問

    int a=1,b=0,c=0のとき a==0 && (b==0 || c==0) a==0 && b==0 || c==0 の2つの論理式あったとします 質問:論理演算子は、必ず「左右2つの変数しかつなげない」のですか? 例えば、前者の論理演算子なら、&&は、a==0とb==0をつないでる。 後者の論理演算子なら、||はb==0 とc==0をつないでる。 質問2:質問1の仮説が正しいとすると、前者も後者も論理演算子&&は、論理演算子||とb==0を共有してますよね?

    • ベストアンサー
    • Java
  • 論理演算に関する質問です。

    論理演算に関する質問です。 以下の問題を解いてみたんですが正解なのか不正解なのか自信がないので教えてくれませんか? 論理関数 f(A,B,C,D)=_A_C_D+_AB_C+BCD+AB_C+A_BCD が与えられているとき積和形の最簡の論理式で表せ。 解き方ですがまずカルノー図を使って簡単化してみたところ f=_A_C_D+AB_C+BD+ACD という結果になってこれが最簡だと思うのですが当たっているでしょうか?

  • 演算結果はカタカナだとどう呼びますか?

    オペランド(operand)は被演算数です。 オペレータ(operator)は演算子です。 では、 ______________________________は演算結果です。 ↑ここに入るのは何がしっくりくるでしょうか? 例 2+3=5のとき 2と3がオペランドです。 +がオペレータです。 5は対応する呼び方があるとすると、なんと呼ぶとよいでしょうか。 =には、触れないでおきます。 ()のある計算式で、括弧中を塊としてみたときに、 式つまり、オペランドとオペレータの列に見えたり、 一つの演算結果に見えたりして、困ります。 例¬(true || false) が¬trueだったり、falseだったりします。 さいごの3つ目のfalseはオペランドでも、オペレータでもなく、演算結果だと思います。 キャルキュレーションみたいな名前があるのでしょうか?

  • 論理演算、どう解けば?

    論理演算を解く際に、図を描いたり(AとBが重なった絵)、1と0の真理値表を書いたりしますよね。 どちらを使って解くべきなのでしょうか?

専門家に質問してみよう