()の役割について

このQ&Aのポイント
  • ()の役割は、優先順位や結合の規則を制御することです。
  • ()を使うことで、計算式の一部を優先的に計算したり、結合の順序を変えることができます。
  • また、()はキャスト演算子としても使用され、大きいデータ型から小さいデータ型への明示的な型変換を行うことができます。
回答を見る
  • ベストアンサー

()の役割について

以下は、()の定義として正しいですか? 定義1:優先順位について、()内にある演算子の方が高くなる。 例えば、 「n=(10+10)/10;」は、本来は除法のほうが優先順位が高いから10/10という計算式から行うが、()により先に10+10が計算され、それから、20/10が計算され、nは2となる。 結合の規則については、()を用いるとその結合の規則の逆になる。 例えば、 n=80/10/1/(20/5);は、()が無ければ左から計算されるが、()があるから、「(20/5)」から計算され、あとは結合の規則通り左から計算されるから、nは2になる。 定義2:「キャスト演算子」としての役割がある。具体的には、大きいデータ型から小さいそれへの型変換を可能にし、「データが失われる可能性をプログラマが承知している旨」を明示する「明示的な型変換」の役割がある。

  • Java
  • 回答数5
  • ありがとう数4

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

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

キャストの方はさておき、計算時の()は数学と同じで「最優先に中を計算する」とだけ憶えとけばいいです。 入れ子になってる場合は内側優先。

wantanton
質問者

お礼

お返事おくれて申し訳御座いません。 丁重なご回答ありがとうございます! そうですよね、最優先に計算するって単純に捉えればいいですよね。

その他の回答 (4)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

もう一つ重要な役割がありました。 「メソッドの引数」

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

「() の定義」って何を意味するの? 「定義2」は「キャスト演算子」であって, (確かにかっこを使ってはいるけど) 「() の定義」と呼ぶにはふさわしくない. あと, 「()を用いるとその結合の規則の逆になる」は明らかにおかしい. たとえば n=(80/10)/2/5; とやっても, (2つ目の) / の結合規則が「逆になる」ようなことはない.

wantanton
質問者

お礼

お返事おくれて申し訳御座いません。 丁重なご回答ありがとうございます! Tacosanのご指摘はいつも僕にきずきを与えてくれます。 ありがとうございます!

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> 大きいデータ型から小さいそれへの型変換を可能にし、「データが失われる可能性をプログラマが承知している旨」を明示する「明示的な型変換」の役割がある 単に「明示的な型変換」が必要だからであって、前半部分は不要でしょう。 暗黙の変換されるからといって「明示的なキャストをしてはいけない」というわけでもないです。 変な考えは持たない方がいいです。 ・「小さい型」→「大きい型」が必要なケース int a=5 ; int b=2 ; double d; d=a/b ; // int同士の演算は小数点以下切り捨てなので d=2 となり「データが失われる」 d=(double)a/b ; // aをint→doubleと「大きな型」に変換。bの暗黙の変換と合せて d=5.0/2.0=2.5に ・クラス同士の型変換の場合、「大きい」「小さい」と単純に決めることはできない。

wantanton
質問者

お礼

お返事おくれて申し訳御座いません。 丁重なご回答ありがとうございます! 物事をあまり複雑に考えてしまってはだめですよね。 シンプルに考えます!

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

>結合の規則については、()を用いるとその結合の規則の逆になる。 >例えば、 n=80/10/1/(20/5);は、()が無ければ左から計算されるが、()があるから、「(20/5)」から計算され、あとは結合の規則通り左から計算されるから、nは2になる。 これは計算結果は合っていますが理由が間違いです。 結合の規則は一切変わっていません。 80/10を計算(8)→8/1を計算(1)→8/(20/5)を計算…する前に20/5を計算(4)→8/4を計算 ということをやっていいます。 試しに以下のコードを実行してみれば上記がよくわかります。 class test_java { public static void main(String[] args){ int n = eighty()/ten()/one()/(twenty()/five()); System.out.println(n); } private static int eighty(){ System.out.println("eighty"); return 80; } private static int ten(){ System.out.println("ten"); return 10; } private static int one(){ System.out.println("one"); return 1; } private static int twenty(){ System.out.println("twenty"); return 20; } private static int five(){ System.out.println("five"); return 5; } } 括弧の中を優先して計算するならばtwentyかfiveが先に表示されるはずですが、 上記を実行すると出力結果は以下のようになりました。(version 1.6.0_24): eighty ten one twenty five 2 これは自分の説明した順番で計算をしたことを示しています。

wantanton
質問者

お礼

お返事おくれて申し訳御座いません。 丁重なご回答ありがとうございます! 実際にソースコードまで書いてくださってありがとうございます!

関連するQ&A

  • 優先順位について質問

    優先順位とは、結合という観点において、「それが高い演算子ほどオペランドを先に結び付ける」こういうことでしょうか? 質問2:結合規則とは、同じ優先順位の演算子において、「より右にある演算子の結びつきが優先されるのか、あるいは、より左にある演算子の結びつきが優先されるのか」を示す概念。 こういうことでしょうか?

    • ベストアンサー
    • Java
  • 前置単項演算子の優先順位や言葉の定義

    javascriptの場合 ++ や -- は前置きなら右結合、後置きなら左結合ということのようですが、この結合規則の具体例ってどういったものでしょうか。 そして例えば++a--だとどっちが先に評価されるのでしょうか。(結果は同じだとしても) また2項演算子の + や - などの結合規則は理解できるのですが、単項演算子の場合に結合規則が具体的に何のことを言っているのかどうもよくわかりません。 例えば !--abc や ++a-- のように単項演算子を並べた場合も、どのように結合して何をもって右とか左と言うのか、という点を明確にしたいです。 (特にjavascriptに限った話ではないのでjavaやcなど他の言語での解説でもかまいません) いままであやふやにしてしまっていた言葉や定義をここではっきりしたいです。 具体的な例で示していただけると助かります。

  • 演算対象の数字と演算子を入力して計算させる

    数字と演算子をそれぞれ入力し、優先順位の高い順に四則演算させるにはどのような考え方をすればよいのでしょうか。 数字をa[7]とおいて、演算子をop[7]としてそれぞれ配列に格納しましたが、そこから先に進めません。 オペランドと演算子の組み合わせならば優先順に計算してくれるのはわかっていますが、オペランドと演算子を格納した配列では上手く行きません。 実は既に全ての演算子の組み合わせをIfで表示させるプログラムを根性で作ったのですが、最適解を知りたいです。 言語はCでvisualstudioを使っております。 条件はn回数字を入力したらn-1回演算子を入力し、n回目に=を入力する。nの最大値は7とする。です。 だらだらと見辛い文章で申し訳ありませんが、何卒宜しくお願いします。

  • 優先順位の概念について質問

    質問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
  • 演算子の結合性

    演算子のリストに結合性という項目があります. 左から右,または右から左と書いてあると思います. 演算子のリストは上にある順から優先的に計算されるので, 例えば, ex) int i = hoge + bar * baz; としたとき,bar * baz が先に計算されることは理解しています. しかし掛ける,または足すオペランドの結合性がよくわかりません. *(掛ける)は「左から右」と一覧があるサイトには書いてあります. この「左から右」は,なにから見て左(右)なのでしょうか? C言語を何年か使っていますが,コンパイラが文をどのように解釈しているのか いまだによくわかっていません. よろしくお願いします.

  • 論理演算について質問

    今度こそ最後にします、、 質問:&&や||等の論理演算子は、「その両側にある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
  • FPGAによるデジタルフィルタ計算方法

    AD変換でアナログ値をデジタルに変換して、演算をして、DAでアナログ値に変換して、出力したいと考えています。 そこで、デジタル演算をFPGAで行いたいと考えていますが、以下の計算を行う場合、何か良い方法ありませんでしょうか。 係数に小数点があり、どのように演算すればいいのか、良く分かりません。 計算式は、Y=Y[n-1]+(1-a)*n   (RCフィルタ演算)とありました。 Yは、出力値、nはサンプリングデータの場所、 Y[n-1]は、一個前の演算結果の出力データ、 aが係数で、小数点0.9878等の値が入ります。 この小数点を含む計算をFPGAで実現する方法を教えてください。 あと、FPGAにこだわらず、 他に実現する良い方法ご存じでしたら、教えてください。 宜しくお願い致します。

  • 以下の問題が与えられたのですが、

    以下の問題が与えられたのですが、 (4)という定義なしに答える方法はあるのでしょうか? 本問では(4)という定義はありません。 どなたか教えていただけると助かります。 質量m、角振動数ωの1次元調和振動子の ハミルトニアンは(1)式で与えられる。 ここでp(^は省略します)は運動量演算子、 xは位置演算子であり、交換関係[x,p]=xp-px=ih/2πを満たす。 また、(2)、(3)で定義される2つの演算子を考える。 演算子N=a†aの固有値をnとし、 その規格化された固有状態を|n>とする。 すなわちN|n>=n|n>,<n|n>=1である。 次の2つの関係式が成り立つことを示し、 係数A,Bを求めよ。 a†|n>=A|n+1>, a|n>=B|n-1> ただしA,Bは正の実数とする。

  • アルケンのジアステレオマーの(E)(Z)規則について。

    アルケンのジアステレオマーの(E)(Z)規則について質問です。 2重結合の一方の炭素に結合した基について優先順位を決めて、 もう一方の炭素についても同じように優先順位を決める、 と書いてあったのですが、 優先順位とはどういうものですか? 電気陰性度かと思っていたのですが メチル基とエチル基が比べられなかったりします。 どうかよろしくお願いします。

  • 評価について質問

    質問1:式を構成する要素(変数やリテラル)の評価と演算について、左から右に評価していく過程で、その式の演算子の優先順位の高い順から、その演算子の取るリテラルの評価が終わり次第、計算をする。 よって、オペランドを取る演算子の位置によっては、評価と演算が交互に行われることもある。 たとえば a*b+cという式があれば、 aを評価→bを評価→*の演算→cを評価→+の演算という計算プロセス。 これはつまり、*は、この式において最も優先順位が高いから、aとbを評価した直後、演算を実行したといえる。 何故僕はこんな質問したかというと、全ての要素の評価が終わってから、演算が実行されるものだと思ったからです。 質問2:「式を評価する」とは、変数やリテラルの評価と優先順位を考慮した演算を実行し、そしてその式の答えを求める一連のプロセスのことでしょうか? 質問3:変数の評価とは、「ソースコードの中でその単語(token)を変数だと解釈することで、そのtokenがjavaの変数名の規約に従っていることかつ、それが事前に宣言されていることを 検査した上で、その変数の値を解釈する」こういうことですか?

    • ベストアンサー
    • Java

専門家に質問してみよう