プログラミング
記事内に商品プロモーションを含む場合があります

各言語の演算子の優先順位(C/C++, Go, Python, Java)

Aru

いくつかの言語の演算子の優先順をまとめてみました。言語により差異があるので、移植の際には注意しないと思わぬバグが発生することがあります。なるべく()をつけて明示的に優先順を設定しておいた方がよいです。

はじめに

この記事では、C/C++, Go, Python, Javaの演算子の優先順を一覧にしてみました。優先順を確認するのに利用できるかと思います。

「どの言語も優先順なんて同じでは?」と思っている方もいると思います。実際、自分もそう思っています。

ただ、一部の演算の優先順は異なります。

例えば%と>>の優先順位がC++とGo言語では異なります。C++の場合は、x>>i % 2は、x >> (i % 2)と解釈されますが、Go言語では(x >> i) % 2と解釈されます。つまり、両者の計算結果が異なるということです。

このようなことがあるので、優先順には注意し、迷う場合は()をつける癖をつけておいた方が良いかとおもます。

ちなみに、「Cパズルブック」からの抜粋ですが、結果はわかりますか?

int x, y, z;

x = -3 * 4 % -6 / 5;
x = 2;
x *= 3 + 2;
x *= y = z = 4;

演算子順はパズルブックのパズル問題になるレベルです

C/C++

C/C++言語の演算子の優先順です

優先順位結合規則
[ ] ( ) . ->
++ -- (後置)
左から右
sizeof & * + - ~ !
++ -- (前置)
右から左
* / %左から右
+ -左から右
<< >>左から右
< > <= >=左から右
&左から右
^左から右
|左から右
&&左から右
||左から右
? :右から左
= *= /= %=
+= -= <<= >>= &=
^= |=
右から左

Go言語

Go言語の演算子の優先順です。かなりシンプルです。

優先順位
*, /, %, <<, >>, &, &^
+, -, |, ^
==, !=, <, >, <=, >=
&&
||

Python

Python言語の演算子の優先順です

優先順位
**
+x, -x, ~x
*, @, /, //, %
+, -
<<, >>
&
^
|
in, not in, is, is not, <, <=, >, >=, !=, ==
not x
and
or
if -- else
lambda

Java

Java言語の演算子の優先順です

優先順位結合規則
(引数) [配列添字] . ++ --(後置き)左から右
! ~ + -(単項演算子) ++ --(前置き)右から左
new (型変換)左から右
* / %左から右
+ -左から右
<< >> >>>>左から右
> >= < <= instanceof左から右
== !=
&左から右
^左から右
|左から右
&&左から右
||左から右
? :右から左
= *= /= %=
+= -= <<= >>= &=
^= |=
右から左

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
ある/Aru
ある/Aru
IT&機械学習エンジニア/ファイナンシャルプランナー(CFP®)
専門分野は並列処理・画像処理・機械学習・ディープラーニング。プログラミング言語はC, C++, Go, Pythonを中心として色々利用。現在は、Kaggle, 競プロなどをしながら悠々自適に活動中
記事URLをコピーしました