演算子
出典: フリー百科事典『ウィキペディア(Wikipedia)』
演算子(えんざんし、operator, operator name)は、各種の演算をあらわす記号・符牒のことである。しばしばそれが表す演算自体と(意図的に)混同して使用されるが、それによって混乱が生じることはほとんどない。ただし、プログラミング言語の文法上では、演算と演算子とを区別する。
また、演算が作用する対象のことをオペランド(被演算子、引数、operand)という。たとえば、n と 3 との和を表す式 "n + 3" において、"+" は演算子であり、そのオペランドは "n" と "3" である。
数学的には、演算は写像の一種であるので、各写像の性質によって演算子を幾つかのクラスに分けることができる(「演算」という用語の意味は、一般には「入力と同種のものを出力する」というニュアンスをもつことが多いものの、明確な基準があるわけではなく、写像という用語との区分は曖昧である)。
目次 |
[編集] 形式的分類
[編集] 単項演算子
オペランドが一つだけの演算を表す演算子を、単項演算子という。その記法には、通常はオペランドの前に単項演算子を置く前置記法(ポーランド記法)を用い、オペランドを明示するための括弧 "( )" を伴うことも多い。
代表的な単項演算子として、冪根を表す根号 "√ " がある。負を表す(減算ではない)負符号もそうである(例 : "−3")。通常は省略されるものの、正符号も単項演算子として書くことがある(例 : "+0")。階乗を表す感嘆符(例:"n!")も単項演算子であり、これは例外的に後置記法で書く。絶対値を表す2本の縦線も単項演算子である(例 : |x|)。
関数 f(x) の "f( )" も単項演算子であり、符牒となる文字列 "f" を関数子などと呼ぶ場合もある。関数子としては任意の文字列を使用することができ、代表的なものとして三角関数 "sin", "cos", "tan" などが挙げられる。微分作用素の "d/dx" または "D" や、差分作用素 "Δ" も単項演算子である。また、定数 a を与えるごとに(a が代入可能である限りにおいて)対数関数 loga x が考えられるが、このとき loga は定数一つを含む形で単項演算子として働く(そのような場合、a はその文脈で固定されているために省略を受け、単に log と記して扱われることも少なくはない)。ただし、仮に a をも変化させて扱うならば loga x なる式において log は二つのオペランド a と x を持つ二項演算子(後述)と解されることになる。
[編集] 二項演算子
二つのオペランドから一つの結果を得る演算を表す演算子を二項演算子という。数学での写像を表現するのに通常は前置記法で書くのに対して、二項演算子は中置記法で書くことが多い。つまり、"k + 3" のように演算子を二つのオペランドの中間に置く。
二項演算を2変数の関数として、B(·, ·) のように関数子と括弧とコンマを用いた形式で(「·」の位置にそれぞれ適当なオペランドを配置して)表すこともしばしばある。このような形式でオペランドを併記する方法では二項以上の多項演算も表現することができる。明示的な関数子をもたない場合もあり、例えば内積 "<·, ·>", 微分作用素(リー環)の括弧積(リーのブラケット)"[·, ·]", ポアソン括弧 "{·, ·}", ルジャンドル記号 "(· / ·)" などが挙げられる。これらは複数の記号で一つの演算子の働きをする。また、例えば二項係数の2種類の記法
のように、一つの演算に対して複数の異なる記法の(場合によっては形式も異なる)演算子が用いられていることもある。
[編集] 多項演算子
二項演算子における記法の多くはそれ以上の任意有限個のオペランドを持つ演算子に対しても、引数を列記する方法を与えるなどの適当な方法で拡張を受ける。さらに、添字集合を適当に指定することによって複数(一般には無限個)のオペランドを一つのオペランドに見立てることも有限的な記述には効果的である。実際、それによって無限個のオペランドを持つ演算子に有限項演算の記法を援用することが可能になる。また、このとき与えた添字もやはりオペランドと解釈することが可能である。
また、前述の log に対する記述とまったく同じ理屈を逆に考えれば、二項演算子のとる二つのオペランドのうち一つを固定する(代入可能な値を代入する)ならば、それによって新たに単項演算子が得られる(あるいは固定するオペランドを添字とする単項演算子の族が得られる)ということが理解される。同様にして、多くのオペランドを持つ多項演算子のうち一つあるいは複数のオペランドを固定することによって、与えられた多項演算子をより制限された数のオペランドを持つ演算子族と読みかえることができる。
[編集] 意味的分類
[編集] 算術演算子
四則演算を表す演算子、たとえば和を表す "+" や積を表す "×" などは二項演算子である。算術演算においては多くの場合、二つのオペランドは同種のものであり、結果も同種であることが多い。
[編集] 関係演算子
二つのオペランドの関係を示す記号のことを関係子という。関係子を、二つのオペランドの関係が真であるか偽であるかを判定する演算を表す演算子とみなすとき、関係演算子という。数理論理学では、関係演算は二つの数式から真理値(ブール値)を得る演算とみなされる。関係演算子もその多くが二項演算子として機能することから中置記法で記されることが多い。
等号 "=", 不等号 "<", ">", "≤", "≥", "≠", 平行記号 "||", 垂直記号 "⊥" などが関係演算子である。
[編集] 論理演算子
数理論理学における論理演算子は、オペランドの真理値(真・偽)に対する論理積 "∧" や論理和 "∨" などの論理演算を表し、中置記法で書くことが多い。(否定を表す前置の単項演算子 "¬" もある。)
[編集] プログラミング言語における演算子
プログラミング言語にはさまざまな働きをする演算子が組み込まれている。
算術演算子として、四則演算のうち加減算には、一般的な算術と同じ演算子 "+", "-" を用いる。乗算の演算子には "×" の代わりに "*" (アスタリスク)を用い、除算には "÷" の代わりに "/" (スラッシュ)が用いられる。一般的な算術にはない演算子として、剰余(除算の余り)を求める演算子 "%" (言語Cの場合)がある。剰余演算子 "%" の代わりに英字列 "mod" を用いる言語もある。
関係演算子は、およそ数学とあまり変わらないが、プログラミング言語によって細かい差異が比較的多い傾向にある。以下はその例である。
- = の意味
- C言語の系統では、= は代入の意味で等号の意味には == を使う。
- 不等号
- 1 < x < 5が「xは1より大きく5より小さい」を意味しないプログラミング言語が多い。そのような場合には論理演算子を使って「1 < x and x < 5」のように記述する。
- ≤, ≥
- <=, >=を用いることが多いが,言語によってはさらに=<, =>を認めるものもある。
論理演算子には、論理積を表す "and"、論理和を表す "or"、否定を表す "not" などがある。排他的論理和を表す "xor" もよく使われる。ビット演算子を兼ねているプログラミング言語もある。また、条件文に対する糖衣構文として条件演算子があるが、これは三項演算子と捉えることができる。
このほかにも、プログラミング言語によっては文字列やメモリを扱う演算子もある。
C++などのように、最近のプログラミング言語では既存の演算子に自分で新たな意味を定義することができる(演算子多重定義)。 ALGOLでは、利用者が自分で新たな演算子を定義することができる(利用者定義演算子)が、これは珍しい例である。
[編集] 関連項目
カテゴリ: 代数学 | 数学の表記法 | プログラミング言語の構文 | 数学に関する記事