## Tcl8.6.17/Tk8.6.17 Documentation > Tcl Commands > mathop

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    mathop — Tcl 命令としての算術演算子 Mathematical operators as Tcl commands
  構文 SYNOPSIS
  説明 DESCRIPTION
  数学的演算子 MATHEMATICAL OPERATORS
    ! boolean
    + ?number ...?
    - number ?number ...?
    * ?number ...?
    / number ?number ...?
    % number number
    ** ?number ...?
  比較演算子　　　COMPARISON OPERATORS
    == ?arg ...?
    eq ?arg ...?
    != arg arg
    ne arg arg
    < ?arg ...?
    <= ?arg ...?
    > ?arg ...?
    >= ?arg ...?
  ビット演算の演算子 BIT-WISE OPERATORS
    ~ number
    & ?number ...?
    | ?number ...?
    ^ ?number ...?
    << number number
    >> number number
  リスト演算 LIST OPERATORS
    in arg list
    ni arg list
  用例 EXAMPLES
  SEE ALSO
  KEYWORDS

### NAME

mathop — Tcl 命令としての算術演算子 Mathematical operators as Tcl commands

### 構文 SYNOPSIS

package require Tcl 8.5

::tcl::mathop::! number
::tcl::mathop::~ number
::tcl::mathop::+ ?number ...?
::tcl::mathop::- number ?number ...?
::tcl::mathop::* ?number ...?
::tcl::mathop::/ number ?number ...?
::tcl::mathop::% number number
::tcl::mathop::** ?number ...?
::tcl::mathop::& ?number ...?
::tcl::mathop::| ?number ...?
::tcl::mathop::^ ?number ...?
::tcl::mathop::<< number number
::tcl::mathop::>> number number
::tcl::mathop::== ?arg ...?
::tcl::mathop::!= arg arg
::tcl::mathop::< ?arg ...?
::tcl::mathop::<= ?arg ...?
::tcl::mathop::>= ?arg ...?
::tcl::mathop::> ?arg ...?
::tcl::mathop::eq ?arg ...?
::tcl::mathop::ne arg arg
::tcl::mathop::in arg list
::tcl::mathop::ni arg list

### 説明 DESCRIPTION

この ::tcl::mathop 名前空間中の命令は､expr 命令に運用されているのと同じ種類の演算子を実装する｡全ての演算子はこの名前空間から移入されているが､省略時設定では他のどの名前空間からも移入されてない｡註意すべきは､この名前空間中のどの命令も､改名や､再実装や､削除することでは､expr 命令の振舞いの内容を取り換えないし､又､::tcl::mathop 名前空間内にどんな新しい命令も定義することはない｡ The commands in the ::tcl::mathop namespace implement the same set of operations as supported by the expr command. All are exported from the namespace, but are not imported into any other namespace by default. Note that renaming, reimplementing or deleting any of the commands in the namespace does not alter the way that the expr command behaves, and nor does defining any new commands in the ::tcl::mathop namespace.

次の演算子に対応している: The following operator commands are supported:

  ~ | ! | + | - | *
  / | % | ** | & | |
  ^ | >> | << | == | eq
  != | ne | < | <= | >
  >= | in | ni

#### 数学的演算子 MATHEMATICAL OPERATORS

数学的演算子命令の動作は次の通り: The behaviors of the mathematical operator commands are as follows:

! boolean
  boolean [論理値]の論理否定を返す､此処で､ boolean はどの様な数学的値でも､それ以外の書式の論理値でもよい(即ち､もし引数が虚偽又は零であれば真値を返し､真値又は非零であれば偽値を返す)｡ 　　　 Returns the boolean negation of boolean, where boolean may be any numeric value or any other form of boolean value (i.e. it returns truth if the argument is falsity or zero, and falsity if the argument is truth or non-zero).

+ ?number ...?
  任意の個数の引数の和を返す｡各 number 引数はどの様な数値の値でもよい｡引数が与えられない場合､結果は零になる(和の同一性)｡ 　　 Returns the sum of arbitrarily many arguments. Each number argument may be any numeric value. If no arguments are given, the result will be zero (the summation identity).

- number ?number ...?
  引数が１個だけの時､その数の値を符号反転して返す｡複数個の場合､始めの値から､それに引き続く全ての数値が減算された結果の数を返す｡全ての number 引数は数値であることを要す｡少なくとも一つの引数が与えられねばならない｡ If only a single number argument is given, returns the negation of that numeric value. Otherwise returns the number that results when all subsequent numeric values are subtracted from the first one. All number arguments must be numeric values. At least one argument must be given.

* ?number ...?
  任意の個数の引数の積を返す｡各 number はどのような数の値でも好い｡引数が与えられない場合結果は 1 になる(積の単一性)｡ Returns the product of arbitrarily many arguments. Each number may be any numeric value. If no arguments are given, the result will be one (the multiplicative identity).

/ number ?number ...?
  もし一つの number 引数だけが与えられた場合､その数値の逆数を返す(即ち1.0 をその値で割って得られた値)｡複数の場合､第１の数値引数がそれに続く全ての数値引数で割られた結果の数を返す｡全ての number 引数は数値の値であることを要す｡少なくとも一つの引数が与えられねばならない｡ If only a single number argument is given, returns the reciprocal of that numeric value (i.e. the value obtained by dividing 1.0 by that value). Otherwise returns the number that results when the first numeric argument is divided by all subsequent numeric arguments. All number arguments must be numeric values. At least one argument must be given.

  註意点は引数リストの最初の値が整数の場合､その最初の段階では整数除算が使われる(即ち､その途中の結果は､それに恰も函数 floor と int がその順で適用されたものになる)｡もし､演算の全ての値が整数であると､結果も整数になる｡ 　　　 Note that when the leading values in the list of arguments are integers, integer division will be used for those initial steps (i.e. the intermediate results will be as if the functions floor and int are applied to them, in that order). If all values in the operation are integers, the result will be an integer.

% number number
  第１引数を第２引数で除した整数剰余(即ち､余り)を返す｡両方の number は整数でなければならない｡又､結果の符合は､第２の number の符号に等しく､後者は零であってはならない｡ Returns the integral modulus (i.e., remainder) of the first argument with respect to the second. Each number must have an integral value. Also, the sign of the result will be the same as the sign of the second number, which must not be zero.

  註意 Tcl は負数にさえもこの演算を定義しているので､次の命令は真値を返す(判り易くする為に名前空間を省く): Note that Tcl defines this operation exactly even for negative numbers, so that the following command returns a true value (omitting the namespace for clarity):

      == [* [/ x y] y] [- x [% x y]]

** ?number ...?
  それに引続く引数を処理した結果に再帰的処理して結果を冪乗した結果を返す､従って “** 2 3 4” は “** 2 [** 3 4]” と同じになる｡各 number は如何なる数値でもよいが､もし第１引数が負数の場合､第２の数は､小数であってはならない｡Tcl が処理できる最大冪乗値は､もし第一番目の数(訳註 底)が１より大きい整数の場合は 268435455 である｡もし､引数がないと､結果は1になる｡もし､１つだけ引数が指定されると結果はその引数になる｡全ての引数が整数ばかりの時のみ結果が整数になる｡ Returns the result of raising each value to the power of the result of recursively operating on the result of processing the following arguments, so “** 2 3 4” is the same as “** 2 [** 3 4]”. Each number may be any numeric value, though the second number must not be fractional if the first is negative. The maximum exponent value that Tcl can handle if the first number is an integer > 1 is 268435455. If no arguments are given, the result will be one, and if only one argument is given, the result will be that argument. The result will have an integral value only when all arguments are integral values.

#### 比較演算子　　　COMPARISON OPERATORS

比較演算子命令(その殆どは優先的に数的引数を演算する)の動作は次の通り: The behaviors of the comparison operator commands (most of which operate preferentially on numeric arguments) are as follows:

== ?arg ...?
  各引数が､ expr == 演算子の意味合いで（即ち､可能であれば数値比較､できない場合は正確な文字列比較）､両側の引数同志が等しいかを返す｡もし二つより少ない引数が与えられると､この演算は常に真値を返す｡ Returns whether each argument is equal to the arguments on each side of it in the sense of the expr == operator (i.e., numeric comparison if possible, exact string comparison otherwise). If fewer than two arguments are given, this operation always returns a true value.

eq ?arg ...?
  各引数が､厳密文字比較を使用して両側の引数が等しいかを返す｡もし二つより少ない引数が与えられると､この演算は常に真値を返す｡ Returns whether each argument is equal to the arguments on each side of it using exact string comparison. If fewer than two arguments are given, this operation always returns a true value.

!= arg arg
  二つの引数が､expr != 演算子の意味合いで(即ち､可能であれば数値比較､できない場合は正確な文字列比較)､互いに等しくないかを返す｡ Returns whether the two arguments are not equal to each other, in the sense of the expr != operator (i.e., numeric comparison if possible, exact string comparison otherwise).

ne arg arg
  各引数が､厳密文字比較を使用して両側の引数が等しくないかを返す｡ Returns whether the two arguments are not equal to each other using exact string comparison.

< ?arg ...?
  任意個数の引数が､最初のものより後ろのそれぞれの引数はそれに先行するものより厳密に大きくなければならない様に並べられているか否かを返す｡比較は､優先的に数値で遂行され､できないときは､ユニコード文字列の比較を使って遂行される｡もし二つより少ない引数があると､この演算は常に真値を返す｡数値の引数を文字列として比較すべき場合は､代りに string compare を使うべきである｡ 　 Returns whether the arbitrarily-many arguments are ordered, with each argument after the first having to be strictly more than the one preceding it. Comparisons are performed preferentially on the numeric values, and are otherwise performed using UNICODE string comparison. If fewer than two arguments are present, this operation always returns a true value. When the arguments are numeric but should be compared as strings, the string compare command should be used instead.

<= ?arg ...?
  任意個数の引数が､最初のものより後ろのそれぞれの引数はそれに先行するものより厳密に等しいか大きくなければならない様に並べられているか否かを返す｡比較は､優先的に数値で遂行され､できないときは､ユニコード文字列の比較を使って遂行される｡もし二つより少ない引数があると､この演算は常に真値を返す｡数値の引数を文字列として比較すべき場合は､代りに string compare を使うべきである｡ Returns whether the arbitrarily-many arguments are ordered, with each argument after the first having to be equal to or more than the one preceding it. Comparisons are performed preferentially on the numeric values, and are otherwise performed using UNICODE string comparison. If fewer than two arguments are present, this operation always returns a true value. When the arguments are numeric but should be compared as strings, the string compare command should be used instead.

> ?arg ...?
  任意個数の引数が､最初のものより後ろのそれぞれの引数はそれに先行するものより厳密に小さくなければならない様に並べられているか否かを返す｡比較は､優先的に数値で遂行され､できないときは､ユニコード文字列の比較を使って遂行される｡もし二つより少ない引数があると､この演算は常に真値を返す｡数値の引数を文字列として比較すべき場合は､代りに string compare を使うべきである｡ 　 Returns whether the arbitrarily-many arguments are ordered, with each argument after the first having to be strictly less than the one preceding it. Comparisons are performed preferentially on the numeric values, and are otherwise performed using UNICODE string comparison. If fewer than two arguments are present, this operation always returns a true value. When the arguments are numeric but should be compared as strings, the string compare command should be used instead.

>= ?arg ...?
  任意個数の引数が､最初のものより後ろのそれぞれの引数はそれに先行するものより厳密に等しいか小さくなければならない様に並べられているか否かを返す｡比較は､優先的に数値で遂行され､できないときは､ユニコード文字列の比較を使って遂行される｡もし二つより少ない引数があると､この演算は常に真値を返す｡数値の引数を文字列として比較すべき場合は､代りに string compare を使うべきである｡ 　 Returns whether the arbitrarily-many arguments are ordered, with each argument after the first having to be equal to or less than the one preceding it. Comparisons are performed preferentially on the numeric values, and are otherwise performed using UNICODE string comparison. If fewer than two arguments are present, this operation always returns a true value. When the arguments are numeric but should be compared as strings, the string compare command should be used instead.

#### ビット演算の演算子 BIT-WISE OPERATORS

ビット演算の演算子命令(これら演算子は全て､整数引数のみを演算する)の振舞いは以下の通り: The behaviors of the bit-wise operator commands (all of which only operate on integral arguments) are as follows:

~ number
  ビット演算での number の否定を返す｡ number は任意の大きさの整数｡註意 この演算の結果は常に入力の number と反対の符号を有する｡ Returns the bit-wise negation of number. Number may be an integer of any size. Note that the result of this operation will always have the opposite sign to the input number.

& ?number ...?
  任意個数の引数のビット演算の論理積を返す｡各 number は整数値を持たねばならない｡もし､引数が与えられない場合､結果は-1になる｡ Returns the bit-wise AND of each of the arbitrarily many arguments. Each number must have an integral value. If no arguments are given, the result will be minus one.

| ?number ...?
  任意個数の引数のビット演算の論理和を返す｡各 number は整数値を持たねばならない｡もし､引数が与えられない場合､結果は零になる｡ Returns the bit-wise OR of each of the arbitrarily many arguments. Each number must have an integral value. If no arguments are given, the result will be zero.

^ ?number ...?
  任意個数の引数のビット演算の排他論理和を返す｡各 number は整数値を持たねばならない｡もし､引数が与えられない場合､結果は零になる｡ Returns the bit-wise XOR of each of the arbitrarily many arguments. Each number must have an integral value. If no arguments are given, the result will be zero.

<< number number
  ビット演算で第１引数について､第２引数で指定した数のビットだけ左に移動した値を返す｡各 number は整数値を持たねばならない｡ Returns the result of bit-wise shifting the first argument left by the number of bits specified in the second argument. Each number must have an integral value.

>> number number
  ビット演算で第１引数について､第２引数で指定した数のビットだけ右に移動した値を返す｡各 number は整数値を持たねばならない｡ Returns the result of bit-wise shifting the first argument right by the number of bits specified in the second argument. Each number must have an integral value.

#### リスト演算 LIST OPERATORS

リストを対象とする演算子の振舞いは次の通り: The behaviors of the list-oriented operator commands are as follows:

in arg list
  値 arg がリスト list 中に存するか否かを返す(要素の厳密な文字列比較による)｡ Returns whether the value arg is present in the list list (according to exact string comparison of elements).

ni arg list
  値 arg がリスト list 中に存しないことを調べて返す(要素の厳密な文字列比較による)｡ Returns whether the value arg is not present in the list list (according to exact string comparison of elements).

### 用例 EXAMPLES

演算子を使用する最も単純な方法は､大概は､ namespace path を使って､この命令を利用可能にさせることである｡これには､現在の名前空間によって定義された命令の揃組に影響を与えないという長所がある｡ The simplest way to use the operators is often by using namespace path to make the commands available. This has the advantage of not affecting the set of commands defined by the current namespace.

    namespace path {::tcl::mathop ::tcl::mathfunc}

    # 幾つかの数の和を算出する
    # Compute the sum of some numbers
    set sum [+ 1 2 3]

    # リストの平均値を算出する
    # Compute the average of a list
    set list {1 2 3 4 5 6}
    set mean [/ [+ {*}$list] [double [llength $list]]]

    # リストの要素であるかを調べる
    # Test for list membership
    set gotIt [in 3 $list]

    # 定めた範囲に入っているか調べる
    # Test to see if a value is within some defined range
    set inRange [<= 1 $x 5]

    # リストが整列されているか調べる
    # Test to see if a list is sorted
    set sorted [<= {*}$list]

### SEE ALSO

expr, mathfunc, namespace

### KEYWORDS

command, expression, operator