- PR -

VisualBasic6.0 forとcaseを用いた数の和について

投稿者投稿内容
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2008-07-03 14:09
引用:

Case Is >= 154 And i <= 333
b = b + i
Case Is >= 334 And i <= 500
c = c + i

これは、

Case Is >= 154
b = b + i
Case Is >= 334
c = c + i

と言う、解釈がされて、想定と違う挙動になっているんだと思う。



unibonさん理論によれば、
コード:

Case Is >= (154 And i <= 333)
b = b + i
Case Is >= (334 And i <= 500)
c = c + i



Case Is >= (154 And i <= 333) について展開すると、

iが333以下のとき、
「i <= 333」は「true」、「154 And true」は「154」したがって、
Case Is >= 154

iが333より大きいとき、
「i <= 333」は「false」、「154 And false」は「0」、したがって、
Case Is >= 0

と解釈している。ということですよね?
※true = -1, false = 0 とみなしています。


[ メッセージ編集済み 編集者: こあら 編集日時 2008-07-03 14:10 ]
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-07-03 16:22
引用:

こあらさんの書き込み (2008-07-03 14:09) より:
と解釈している。ということですよね?


そうです。

ちなみに、この構文で使いづらいと感じるところは、
コード:
Case Is >= 154 And i <= 333


がどんな条件で合致するかを知りたくても、
コード:
Debug.Print Is >= 154 And i <= 333


や、
コード:
Debug.Print i Is >= 154 And i <= 333


のようにして確かめることができないところですね。
RUN
常連さん
会議室デビュー日: 2007/10/05
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 2008-07-03 21:04
引用:

こあらさんの書き込み (2008-07-03 14:09) より:

Case Is >= (154 And i <= 333) について展開すると、

iが333以下のとき、
「i <= 333」は「true」、「154 And true」は「154」したがって、




あぁ〜、そっか。ちょい勘違いしていた。
(154 And i <= 333)
の部分って、154をBooleanに暗黙的に変換して、
i <= 333と論理演算としてのAndとる
と言う意味じゃなくて、

i <= 333 の比較結果をIntegerに暗黙的に変換して
154とBit演算としてのAndをとる

って事か。
VB6だと、Boolean→Integerの暗黙的変換が可能って事か。

Boolean→Integerが暗黙的変換されない前提で考えてたわorz

と成ると、あとはTrue→Integerの変換結果が-1に成るかどうかと言う問題になるのか
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-07-04 14:39
VB は 0 が False で 0 '以外' は True という仕様になっています。 False が 0 なので便宜上 True は -1 になっているだけです。(補数で FFFF... だからですね)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)