VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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)」のイメージとなります。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -