[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/04/06(Thu) 09:28
投稿者名:作業中
Eメール:
URL :
タイトル:
c = a Or b??
お世話になっております。

現在、VBでの案件にて作業中ですが、VB経験が浅く
わからないことだらけです。
あまりに初歩的(?)だと思われる構文でわからない
箇所があったため、ご教授頂きたく、よろしくお願い
致します。

タイトル通り、「c = a Or b」の構文があるのですが、
これはいったい何をしてるのでしょう・・・。
Cで言う三項演算みたいなものでしょうか??

投稿時間:2006/04/06(Thu) 09:35
投稿者名:
Eメール:
URL :
タイトル:
Re: c = a Or b??
> タイトル通り、「c = a Or b」の構文があるのですが、
> これはいったい何をしてるのでしょう・・・。
VB6までの"="は演算子ではなく、代入構文です
"="の左に代入先を書き、右に式を書くわけです
ということで、"a or b"の演算結果を"c"に代入しているわけですね
演算子の詳しい説明はMSDNなりgoogleなりで調べてください

> Cで言う三項演算みたいなものでしょうか??
なので、ちがいますね

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

投稿時間:2006/04/06(Thu) 10:01
投稿者名:作業中
Eメール:
URL :
タイトル:
【解決】もさん、魔界の仮面弁士さんへ
回答を下さった、もさん、魔界の仮面弁士さん、ありがとうございます。

もさんがおっしゃられたように、代入式であることは間違いありません。
そして、今回の場合は魔界の仮面弁士さんにご教授頂いた、論理演算の
パターンでした。

このような初歩的な質問にも関わらず、ご丁寧なアドバイスを頂きまして
ありがとうございました。
今後とも、宜しくお願い致します。