![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.7ベストアンサー
- 回答日時:
>a=0 or 6が実は定数-1になってしまいます。
>というのはどうしてなのでしょうか
a = 0 or 6 と普通にaに代入すると
これはビット演算ですから a に6が入ります。
しかし、if文の中では a=0 と 6 の論理演算になります。
演算子の優先順序など、詳しいことは#6の方の説明の中にあります。
そして (( a = 0 ) or 6 ) の評価が-1(True)となります。
上記でも分かると思いますが、6が単独で残ってしまうのが問題で、
必ずTrueになってしまいます。
No.6
- 回答日時:
> 0 or 6 では単純な計算式ですから 6 となります。
Or演算子は論理和ではなくbit和で計算されます。
00000000と00000110のbit和で00000110
一方、=演算子はbool値を帰します。
また、演算子には優先順位があって、= の方が Or より強い。
> If a = 0 Or 6 Then
は
((a = 0) Or 6)
が評価され
aが0の場合は
(a=0)の値はTrue
2進で書くと
1111111111111111 Or 0000000000000110
でbit和は
1111111111111111
つまり
if True then
aが0以外は
(a=0)の値はFalse
2進で書くと
0000000000000000 Or 0000000000000110
でbit和は
0000000000000110
つまり
if 6 then
if文は0以外はthen節を実行される。
No.5
- 回答日時:
かなり派手に間違っていますね^^;
正しい書き方は#1の方の通りですが、
0 or 6 では単純な計算式ですから 6 となります。
すると 上記のコードは if a = 6 then と同じことになり・・・
ちょっとおかしいですよね。
a = 6と同じなら a が6のときしかifの中に入らないはず!?
実は上記の使い方は二重に論理ミスを犯していまして、
かなりおかしなことになっています。
a = 0 or 6 が実は定数 -1 になってしまっています。
で上記のコードは if -1 then と同じになっています。
この回答への補足
回答ありがとうございます。
かなり派手に間違ってしまいました。
ところで、
>a=0 or 6が実は定数-1になってしまいます。
というのはどうしてなのでしょうか?もうちょっと教えてもらえないでしょうか?
No.4
- 回答日時:
> If a = 0 Or 6 Then
の6というのは、常に6なのでそのif条件には必ず合格(?)します。
正しくは、
If a = 0 Or a = 6 Then
私なら
If (a = 0) Or (a = 6) Then
としますね。
a = (0 Or 6)
というのも無理なんじゃないかなあ。
まあ、VB6にもデバッガがあるので、ifステートメントの条件式の値をウォッチするとよいでしょう。
プリントさせるなら、aだけでなく、条件式の中身も画面上に出すと分かります。
ありがとうございます。
納得できました。
0 or 6が6になるというのは、
00000000
00000110
をorすると6になるからTrueになる、ということであってるでしょうか?
No.2
- 回答日時:
正解は#1の方の書き方で良いと思います。
要は以下のように書いた時、
If [評価式A] Or [評価式B] Then
処理X
ELSE
処理Y
END IF
評価式Aが真 または 評価式Bが真 の時に処理Xが行われます。
質問者さんのような書き方をしてしまうと
a=0が偽と判定されてもBの評価式が「6」としか書いてないので常に真となってしまいます。
※真偽の判断は内部的には 偽が0、真はそれ以外 というようになってます。
その為、0以外の数値などは真と判定されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら…
-
frxファイルの役目
Visual Basic(VBA)
-
VB6でのファイル作成方法
Visual Basic(VBA)
-
VBの画面サイズについて
Visual Basic(VBA)
-
-
4
VB6 配列を初期化したい
Visual Basic(VBA)
-
5
VB6のメモリ解放に関して
Visual Basic(VBA)
-
6
VB6.0-整数と余りを求める
Visual Basic(VBA)
-
7
VB6.0 のformat関数について
Visual Basic(VBA)
-
8
MSDNのコレクションがありません。MSDNを再インストールしてください。
Visual Basic(VBA)
-
9
SPREAD(GrapeCity)のセルにフォーカスを設定するにはどうしたらいいのでしょうか?
Visual Basic(VBA)
-
10
VB6での二重起動(複数起動)の制御について
Visual Basic(VBA)
-
11
他のモジュールのプロシージャの呼び出したい。
Visual Basic(VBA)
-
12
Flexgridで選択行の列の値を取得したい
Visual Basic(VBA)
-
13
VB6とVB.NETでNullの扱いが違う?
Visual Basic(VBA)
-
14
【VB6】項目内に改行コードを含むCSVファイルの読み込み
Visual Basic(VBA)
-
15
VB6のプロジェクトロードエラーについて
Visual Basic(VBA)
-
16
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
17
vb6のVSFlexGridで選択行、列の値を取得し構造体に入れたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
wsprintf関数の使い方について
-
BCD形式で時刻を!
-
String型を3つで比較したい!
-
実行シェルからCOBOLへパラメー...
-
ArrayListの要素数の上限
-
JSPでHashMap・配列の変数の値...
-
javaのCSVデータ読込についてです
-
DOSバッチで変数の値を変数名に...
-
<JFreeChart> 縦軸の値の間隔を...
-
Javascriptでマシン固有の情報...
-
VB6,論理演算子Orの使い方がわ...
-
任意の変数が任意の値になった...
-
Evaluate()に文字列の形式の数...
-
テキストボックスに入力された...
-
8桁整数を限りなく短い文字列に...
-
偶数ビットだけと奇数ビットだ...
-
Excel VBA マクロ 変数を用いた...
-
VB6で固定長の文字列の長さを変...
-
matchesを否定文として使う方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
wsprintf関数の使い方について
-
javaのCSVデータ読込についてです
-
ArrayListの要素数の上限
-
BCD形式で時刻を!
-
DateTimePickerに値を入れたい...
-
excel vba 時間計算と条件分岐...
-
日付や時刻の"01"を" 1"に変換...
-
Stringクラスの変数の格納アド...
-
C言語の変数(LSB)の合わせ込...
-
Evaluate()に文字列の形式の数...
-
char型での演算子
-
DOSバッチで変数の値を変数名に...
-
実行シェルからCOBOLへパラメー...
-
レジストリの値の取得のデータ...
-
ResultSetの内部構造(Java)
-
hiddenの値を消したくない!
-
結合した文字列をファイル名に...
-
String型の値が大文字か小文字...
-
getParameterの値変更
おすすめ情報