S-JIS[2005-01-16/2008-11-15] 変更履歴

プログラミング言語比較

演算(および標準関数)

  • MSX-BASIC [2005-01-16/2008-11-15]
  • VisualBasic for Application [2005-01-16/2008-08-12]
  • VBScript [2007-04-06]
  • VB.NET [2006-04-15/2008-11-15]
  • PASCAL [2005-02-10]
  • PL/I [2005-01-16]
  • Perl [2005-03-12/2006-07-11]
  • C言語(gcc, WIN32) [2005-01-16/2006-10-18]
  • Visual C++(MFC) [2005-01-16/2006-08-23]
  • Java [2005-01-16/2008-07-26]
  • JSP式言語 [2007-06-30]
  • JavaScript [2006-01-08/2006-07-02]
  • C# [2006-03-04/2006-07-24]
  • SQL(Oracle[2005-02-07/2007-10-30]
  • PL/SQL(Oracle) [2005-02-27/2007-09-25]
  • Common Lisp [2005-04-04]
 
四則演算 値 + 値 値 + 値 値 + 値 値 + 値 値 + 値 値 + 値 値 + 値 値 + 値 値 + 値 値 + 値 値 + 値 値 + 値 値 + 値 値 + 値 値 + 値 (+ 値 値 …)
値 - 値 値 - 値 値 - 値 値 - 値 値 - 値 値 - 値 値 - 値 値 - 値 値 - 値 値 - 値 値 - 値 値 - 値 値 - 値 値 - 値 値 - 値 (- 値 値 …)
値 * 値 値 * 値 値 * 値 値 * 値 値 * 値 値 * 値 値 * 値 値 * 値 値 * 値 値 * 値 値 * 値 値 * 値 値 * 値 値 * 値 値 * 値 (* 値 値 …)
値 / 値 値 / 値 値 / 値 値 / 値 値 div 値 値 / 値 値 / 値 値 / 値 値 / 値 値 / 値 値 / 値
値 div 値
値 / 値 値 / 値 値 / 値 値 / 値 (/ 値 値 …)
値 \ 値 値 \ 値 値 \ 値 値 \ 値                        
値 MOD 値 値 Mod 値 値 Mod 値 値 Mod 値 値 mod 値   値 % 値 値 % 値 値 % 値 値 % 値 値 % 値
値 mod 値
値 % 値   MOD(値,値) MOD(値,値) (mod 値 値)
(rem 値 値)
比較演算 =,<> =,<> =,<> =,<> =,<> =,^= ==,!=…数値
eq,ne…文字列
==,!= ==,!= 値.equals(値) ==,!=
eq,ne
==,!=…片方が数値なら数値に変換して比較(変換できないなら不一致扱い)
===,!==…型の変換を伴わない比較
==,!= =, <>,!=,^=
IS NULL,IS NOT NULL
=, <>,!=,^=
IS NULL,IS NOT NULL
eq
Is Is Is
IsNot
…VB2005
==,!= Object.ReferenceEquals(objA, objB) eql,equal
=,/=…数値
3つ以上の引数を持つ場合、「全て等しい」「全て等しくない」
  Like   Like     =~,!~             LIKE LIKE  
<,>,<=,>= <,>,<=,>= <,>,<=,>= <,>,<=,>= <,>,<=,>= <,>,<=,>=,^<,^> <,>,<=,>=…数値
lt,gt,le,ge…文字列
<,>,<=,>= <,>,<=,>= <,>,<=,>= <,>,<=,>=
lt,gt,le,ge
<,>,<=,>=   <,>,<=,>=,BETWEEN <,>,<=,>=,BETWEEN <,>,<=,>=
3つ以上の引数を持つ場合、単調増加・単調減少
論理演算 AND,OR
ビットの論理演算
And,Or And,Or AndAlso,OrElse
左が条件を決定したら、右は計算しない
and,or
比較演算より優先度が高い
&,| and,or
左が条件を決定したら、右は計算しない
&&,||
左が条件を決定したら、右は計算しない
&&,||
左が条件を決定したら、右は計算しない
&&,||
左が条件を決定したら、右は計算しない
&&,||
and,or
&&,||
左が条件を決定したら、右は計算しない
  AND,OR AND,OR (and 値 値 …)
(or 値 値 …)

左が条件を決定したら、右は計算しない
否定 NOT 値 Not 値 Not 値 Not 値 not 値 ^値 not 値 !値 !値 !値 !値
not 値
!値   NOT 値 NOT 値 (not 値)
ビット演算 なし       なし   値 << 数 値 << 数 値 << 数 値 << 数   値 << 数       (ash 値 正数)
なし       なし   値 >> 数 値 >> 数 値 >> 数 値 >> 数   値 >> 数       (ash 値 負数)
なし       なし     なしunsignedにして>>) なしunsignedにして>>) >>>   値 >>> 数        
値 AND 値 値 And 値 値 And 値 値 And 値 なし   値 & 値 値 & 値 値 & 値 値 & 値   値 & 値       (logand 値 値)
値 OR 値 値 Or 値 値 Or 値 値 Or 値 なし   値 | 値 値 | 値 値 | 値 値 | 値   値 | 値       (logor 値 値)
値 XOR 値 値 Xor 値 値 Xor 値 値 Xor 値 なし   値 ^ 値 値 ^ 値 値 ^ 値 値 ^ 値   値 ^ 値       (logxor 値 値)
NOT 値 Not 値 Not 値 Not 値 なし   ~値 ~値 ~値 ~値   ~値       (lognot 値)
インクリメント・デクリメント なし なし     なし   ++$変数 ++変数 ++変数 ++変数   ++変数       (1+ 値)
なし なし     なし   --$変数 --変数 --変数 --変数   --変数       (1- 値)
なし なし   変数 += 値 なし   $変数 += 値; 変数 += 値 変数 += 値 変数 += 値   変数 += 値       (incf 変数 値)
なし なし   変数 -= 値 なし   $変数 -= 値; 変数 -= 値 変数 -= 値 変数 -= 値   変数 -= 値       (decf 変数 値)
べき乗 値 ^ 指数 値 ^ 指数 値 ^ 指数 値 ^ 指数   値 ** 指数 値 ** 指数 pow(値, 指数) pow(値, 指数) Math.pow(値, 指数)   Math.pow(値, 指数)   POWER(値, 指数) POWER(値, 指数) (expt 値 指数)
代入演算子 = = = =
+= -= *= /=
\=
^=
:= = =
+= -= *= /= %=
&= |= ^=
<<= >>=
&&= ||=
**=
=
+= -= *= /= %=
&= |= ^=
<<= >>=
=
+= -= *= /= %=
&= |= ^=
<<= >>=
=
+= -= *= /= %=
&= |= ^=
<<= >>= >>>=
  =
+= -= *= /= %=
&= |= ^=
<<= >>= >>>=
=
+= -= *= /= %=
&= |= ^=
<<= >>=
  :=  
 
四捨五入 なし Round(値)
Round(値,小数以下の桁)
Round(値,小数以下の桁) Math.Round(値)
Round(値,小数以下の桁)
round(値)         Math.round(値)   Math.round(値)   ROUND(値)
ROUND(値,小数以下の桁)
ROUND(値)
ROUND(値,小数以下の桁)
(round 値)
整数化 INT(値) Int(値) Int(値) Math.Floor(値)           Math.floor(値)   Math.floor(値)   FLOOR(値) FLOOR(値) (floor 値)
-INT(-値) -Int(-値) -Int(-値) Math.Ceiling(値)           Math.ceil(値)   Math.ceil(値)   CEIL(値) CEIL(値) (ceiling 値)
切り上げ     RoundUp(値,桁)                          
切り捨て FIX(値) Fix(値) Fix(値)
RoundDown(値,桁)
Fix(値) trunc(値)                 TRUNC(値) TRUNC(値) (truncate 値)
絶対値 ABS(値) Abs(値) Abs(値) Math.Abs(値) abs(値)         Math.abs(値)   Math.abs(値)   ABS(値) ABS(値) (abs 値)
符号 SGN(値) Sgn(値) Sgn(値) Math.Sign(値)     値 <=> 0     Math.signum(値)
Integer.signum(値)
…JDK1.5以降
      SIGN(値) SIGN(値) (signum 値)
(zerop 値)
(plusp 値)
(minusp 値)
平方 値^2 値 ^ 2 値 ^ 2 値 ^ 2
Math.Pow(値,2)
sqr(値) 値 ** 2 値 ** 2 pow(値,2) pow(値,2) Math.pow(値,2)   Math.pow(値,2)   POWER(値,2) POWER(値,2) (expt 値 2)
平方根 SQR(値) Sqr(値) Sqr(値) Math.Sqrt(値) sqrt(値)         Math.sqrt(値)   Math.sqrt(値)       (sqrt 値)
(isqrt 値)
三角関数 SIN(値)
COS(値)
TAN(値)
Sin(値)
Cos(値)
Tan(値)
Sin(値)
Cos(値)
Tan(値)
Math.Sin(値)
Math.Cos(値)
Math.Tan(値)
sin(値)
cos(値)
        Math.sin(値)
Math.cos(値)
Math.tan(値)
  Math.sin(値)
Math.cos(値)
Math.tan(値)
      (sin 値)
(cos 値)
(tan 値)
円周率 なし WorksheetFunction.Pi               Math.PI            
対数                               (log 値 基数)
自然対数 LOG(値) Log(値) Log(値) Math.Log(値) ln(値)         Math.log(値)   Math.log(値)       (log 値)
指数関数eのべき乗 EXP(値) Exp(値) Exp(値) Math.Exp(値) exp(値)         Math.exp(値)   Math.exp(値)       (exp 値)
奇数判断 なし       odd(値)                     (oddp 値)
(evenp 値)
乱数の種 RND(負の値) Rnd(負の値)
Randomize
Randomize() Rnd(負の値)
Randomize
          Random#setSeed(値)           (make-random-state 種)
乱数生成 RND(正の値) Rnd(正の値) Rnd() Rnd(正の値)           Random#nextDouble()
Math#random()
  Math.random()       (random 値)
0〜1 0〜1 0〜1 0〜1 0〜1   0〜1 0〜値
if 条件*(偽-真)+偽 IIf(条件,真,偽)   IIf(条件,真,偽)
If(条件,真,偽)
    条件 ? 真 : 偽 条件 ? 真 : 偽 条件 ? 真 : 偽 条件 ? 真 : 偽 条件 ? 真 : 偽 条件 ? 真 : 偽   CASE WHEN 条件 THEN 値 〔WHEN 条件 THEN 値〕… 〔ELSE 値〕 END CASE WHEN 条件 THEN 値 〔WHEN 条件 THEN 値〕… 〔ELSE 値〕 END CASE (if 条件 真 偽)
選択   Switch(
 項目 = 値, 変換値,
 項目 = 値, 変換値,
 True, その他変換値
)
                      CASE 項目
 WHEN 値 THEN 変換値
 WHEN 値 THEN 変換値
 ELSE その他変換値
END

DECODE(項目,
値,変換値,
値,変換値,
その他変換値
)
CASE 項目
 WHEN 値 THEN 変換値
 WHEN 値 THEN 変換値
 ELSE その他変換値
END CASE
(case 式
 (値 式 〜)
 (値 式 〜)
 (otherwise 式 〜)
)
Choose(項目, 変換値1, 変換値2, 変換値3)
最大 なし     Math.max(値,値)       max(値,値) max(値,値) Math.max(値,値)   Math.max(値,値,…)   GREATEST(値,値,…) GREATEST(値,値,…) (max 値 値 …)
最小 なし     Math.min(値,値)       min(値,値) min(値,値) Math.min(値,値)   Math.min(値,値,…)   LEAST(値,値,…) LEAST(値,値,…) (min 値 値 …)
最大公約数                               (gcd 値 値 …)
最小公倍数                               (lcm 値 値 …)
 
null表現 なし Nothing Nothing Nothing nil   undef 0NULL 0NULL null   null
undefined
  NULL NULL nil
()
nullチェック なし 値 Is Nothing 値 Is Nothing 値 Is Nothing       値!=null   値!=null   値 IS NOT NULL 値 IS NOT NULL (null 値)
(eq 値 '())
null変換 なし             値 ? : 0の場合の変換値
(gcc拡張)
          NVL(値,
nullの場合の変換値)
NVL(値,
nullの場合の変換値)
 
            値 ? 0以外の場合の変換値:0の場合の変換値 値 ? 0以外の場合の変換値 : 0の場合の変換値 (値!=null) ? null以外の場合の値 : nullの場合の値   (値!=null) ? null以外の場合の値 : nullの場合の値   NVL2(値,
null以外の場合の変換値,
nullの場合の変換値)
NVL2()は使えない  

比較演算子代入演算子ついて

BASICでは代入も比較も「=」で行う。同じ記号である「=」でも、条件判断(IF文の中)で使われているのかそれ以外か、つまりどういう構文の中にあるか(文脈)で動きが変わる(これを「文脈依存文法」という)。
他の言語ではそれを嫌い(コンパイラーの作りが複雑になるので)、代入と比較に別の識別子を割り当てている(これにより「文脈自由文法(context-free grammar)」になる。文脈に依存しない・文脈から自由という意味)。

Pascalでは、比較に「=」、代入に「:=」を使う。[2008-03-07]
これは確か、数学で等値を表すのが「=」なのでそのまま使い、代入は数学の記号「=」とは意味が違うので別の記号を使ったのだったと思う。
しかし理屈ではそれが正しくても、実際のコーディングでは比較より代入の方をよく使うので、不便になっていると思う。

ちなみに僕は、文章で書くとき(設計書を書くとき)は、代入には「=」(半角のイコール)、比較には「=」(全角のイコール)を使う。[2008-05-09]
比較の記号は「=≠≒≡<>≦≧≪≫」と、全て全角文字で揃っているので、統一がとれて気持ちいいから。
C言語の比較演算子は、「<」と「>」を除けば「==」「!=」「<=」「>=」という具合に全部2文字で、かつ「=」が常に右側に付くという整合性が好き(笑)
しかし設計書では「<=」や「>=」は使わず、「≦」「≧」を使う。
「<=」はプログラミング言語上の表記であり、設計書は自然言語で書くべき(「≦」はプログラミング言語ではなく、数学の記号)だから。


左辺値右辺値について

値を代入(だいにゅう)することが出来るものを左辺値と呼ぶ。[2007-12-01]
要するに代入文はたいてい左側に代入先、右側に代入元を書くので、代入記号の左側に書けるものが左辺値、右側に書けるものが右辺値
例えば変数や配列には代入することが出来るので左辺値。C言語ではポインター「*p」にも代入できるので、これも左辺値。
右辺値は値になるものであればよいので、変数・定数・配列・ポインター・演算などが右辺値と呼ばれる。

変数にしか代入できない言語であれば「左辺値」などという言葉を使う必要は無いが、C言語のポインターのように、演算した結果(*(p+1)とか)にも代入できるようなケースもあるので、「代入できる先」という意味で左辺値という言葉を使う。


言語比較全般へ戻る / 参考文献 / プログラム記号比較 / 技術メモへ戻る
メールの送信先:ひしだま