質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

769閲覧

掛け算の順序が知りたい。a * b * cの場合どっちから先なのか?

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/09/20 00:49

単純な質問ですが掛け算で  a * b * cの場合 a * b と  b * cどっちから先なのでしょうか?

cpp

1int main() 2{ 3 int a = 1; 4 int b = 2; 5 int c = 3; 6 7 int r = a * b * c; 8printf("%d",r); 9 10return 0; 11}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

以下のコードで順序が確認できます。
ただしint型のようなプリミティブ型は、コンパイラが勝手に最適化して、順序を勝手に並び替える可能性があります…そこまでは聞いていないとは思いますが

c++

1#include <iostream> 2class MyClass{ 3 public: 4 int a_; 5 MyClass(int a):a_(a) {} 6}; 7 8MyClass operator*(const MyClass& left, const MyClass& right) { 9 std::cout << "left=" << left.a_ << " right=" << right.a_ << endl; 10 return MyClass(left.a_*right.a_); 11} 12 13int main() { 14 MyClass(2)*MyClass(3)*MyClass(5); 15 16 return 0; 17}

投稿2020/09/20 02:50

maai

総合スコア463

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2020/09/20 03:47

> ただしint型のようなプリミティブ型は、コンパイラが勝手に最適化して、順序を勝手に並び替える可能性 int型は多分大丈夫と思いますが、プリミティブ型であっても浮動小数点型の場合は、演算順序によってオーバーフロー・アンダーフローが発生したりしなかったりとなるので、勝手に変えられると困ります。 例: (小さい数)*(大きな数)*(大きな数) で、左から演算すると大丈夫でも、右の*を先に実行するとオーバーフローするケース 規格は見てないのですが、もし規格に「プリミティブ型は順序は保証しない」旨が書いてあるなら、上記のようなケースだと括弧が必須ですね。
guest

0

c++の場合は算数で習うのと一緒。明示したければ、括弧をつけるといい。

c++

1 int r = a * (b * c);

投稿2020/09/20 01:04

shiketa

総合スコア3990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考情報

  • 演算子の優先順位

https://www.javadrive.jp/cstart/ope/index9.html

投稿2020/09/20 01:06

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問