「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@822) [緊急] [解決]
@822■ (#2558) 比較演算子の挙動がおかしい - たいがあ (2016-04-14 11:12) /緊急 未処理
【症状】
比較演算子の挙動がおかしい
trueになると思われる比較結果がfalseになる

【再現方法】

----------
a = 1
b = 1

もし((a)&&(b))ならば
    言う("true")
違えば
    言う("false")

a = 1
b = 2

もし((a)&&(b))ならば
    言う("true")
違えば
    言う("false")

終わり
----------

※&&がANDでも同様

【要望】
正しく比較して欲しい

【バージョン】
デラックス版
バージョン:1.555
最終更新日:2015/12/19
OS   :Windows XP [5.1(2600:2)]

(#2559) Re: 比較演算子の挙動がおかしい - うぇいく (2016-04-14 14:35) /緊急 未処理
ANDや&&は、ビット論理演算子です。ビット論理演算子として正しく計算しています(AND,OR,NOT,XOR等は比較演算子ではありません。念のため。)
それらの演算子に数値を直接指定すると、ビット単位での操作の結果が得られます。
---
(1&&2)を言う  #0001b AND 0002b = 0000b = 0
(7&&14)を言う #0111b AND 1110b = 0110b = 6
---
※なでしこの場合、ANDやORやNOT等の、ビット演算子ではない論理演算子はないです。

真と偽しか受け付けないような文脈(命令。たとえば「もし、」とか)では、偽を0、真を0以外として受け付けますがANDもORも、これに該当しません(整数全般を受け付けます)。
なお、なでしこの場合、真は1です。定数の「はい」「いいえ」等を使うこともできます(はいが1で、いいえが0)
---
もし、(0==0)が1ならば、
 「はい」を言う
違えば、
 「いいえ」を言う

もし、(0==0)が2ならば、
 「はい」を言う
違えば、
 「いいえ」を言う

もし、(0==0)がはいならば、
 「はい」を言う
違えば、
 「いいえ」を言う
----

真理値に対するANDやORを判定したい場合(つまり、BIT単位ではない論理演算子として使いたい場合)は、まず0と比較等をして明示的に真理値(0or1)にしてから、&&や||を適用します。暗黙的な変換(0以外を真として扱う)に頼ることはできません。
----
a = 1
b = 2

もし((a!=0)&(b!=0))ならば
    言う("true")
違えば
    言う("false")
---
#日本語的に書くと以下。どうしても()が必要?
#もし(aが0でない)かつ、(bが0でない)ならば、


(#2560) Re:Re: 比較演算子の挙動がおかしい - たいがあ (2016-04-15 11:25) /緊急 解決
ご回答ありがとうございます。
論理演算子でしたね。
PHPと同じ感覚で&&を使っていましたのでビット演算子だとは気付きませんでした。
解決しました。

(#2558)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能