投稿日 | : 2006/04/06(Thu) 09:54 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re: c = a Or b?? |
> タイトル通り、「c = a Or b」の構文があるのですが、
> これはいったい何をしてるのでしょう・・・。
これには、2種類のパターンがあります。「代入式」と「比較式」です。
------------------------
まず、「代入式」の場合は『c = (a Or b)』の意味で処理されます。
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = 6
b = 10
c = a Or b
のような場合は、c に 14 を代入しているという意味になります。
つまり、6(2進数表現で 0110) と、10(2進数表現で 1010) を Or 演算して、
その結果となる 14(2進数表現で 1110) を c に代入されるわけです。
なお、この場合の = は、「代入演算子」とも呼ばれます。
hhttp://www.microsoft.com/japan/developer/library/vbenlr98/vaoprassign.htm
------------------------
一方、「比較式」の場合は『(c = a) Or (b)』の意味で処理されます。
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = 0
b = 1
c = 0
If c = a Or b Then
MsgBox "TRUE"
Else
MsgBox "FALSE"
End If
この場合、a と c の値が、共に 0 で一致しています。つまり、『c = a』は True です。
そのため、b の値が何であっても、上記は "TRUE" として処理されます。
ちなみに、上記の条件式に括弧を加えて、
If c = (a Or b) Then
のように演算順を変更すると、『a Or b』が 1 となるため、結果が "FALSE" に変化します。
なお、この場合の = は、「等価比較演算子」とも呼ばれます。
hhttp://www.microsoft.com/japan/developer/library/vbenlr98/vagrpcomparison.htm
------------------------
で、こういう時は、「c = (a Or b)」と「(c = a) Or b」のように、優先順位が明らかになるよう、
括弧をつけて表記する事をお奨めします。これにより、曖昧さを軽減できますから。
ただし、他の人が書いたソースは、必ずしも括弧付きで表記されるわけではありませんから、
このあたりの「演算子の優先順位」を、十分に理解しておく事も必要でしょうね。
hhttp://www.microsoft.com/japan/developer/library/vbenlr98/vagrpoperatorprecedence.htm
> Cで言う三項演算みたいなものでしょうか??
VB には、三項演算構文はありません。C 的に書くならば、前者の状況は「c = (a | b)」、
後者の状況は「(c == a) || (b)」もしくは「(c == a) | (b)」のイメージとなります。