プレイ日記
何でこれで 3 が表示されるです?
5そうだね
プレイ済み
返信[1]
親投稿
だにえる haru2016nen
(文字列でも出来るのかー)ORでも可
1そうだね
プレイ済み
返信[2]
親投稿
比較演算子に文字列とぶち込むと3になるのはおちゃめさんが言ってたので知ってたけど、論理演算子でもなるンネ
2そうだね
プレイ済み
返信[3]
親投稿
ちなみに"0"&&"0"が0にならない事からわかるように、まともに計算をしているわけではない。
1そうだね
プレイ済み
返信[4]
親投稿
Ϊċăņ ďо įт hikahikaru3
...青鳥で報告したんだけどまだ治ってなかったのか、、、
1そうだね
未プレイ
返信[5]
親投稿
Ϊċăņ ďо įт hikahikaru3
ま、バグって事で
1そうだね
未プレイ
返信[6]
親投稿
というかバグなのコレ? 変数型判定に使える(→数値文字両対応のDEFが作れる)ので封じられないほうがいい気もする
1そうだね
プレイ済み
返信[7]
親投稿
MIKI ifconfig
比較演算子ともども仕様だと思う。
6そうだね
プレイ済み
返信[8]
親投稿
ケイン KEIN.HORGAN
命令表を見てみましたが OR は、ビットの足し算を行う命令ですね。だから、 1or2 が 3になるのは正しいです。 1は、ビットでいうと 0001 になります。 2は、ビットでいうと 0010 になります。 これを足し算すると、0011 になります。 0011 というのは、10進表記でいうと3 のことです。 だから、1or2 は、3になるわけですね。
4そうだね
プレイ済み
返信[9]
親投稿
ケイン KEIN.HORGAN
また、もともとの本題の || についてですが、「論理演算子」となっています。 論理演算子は、その結果が「真偽」となる演算子ですが、真偽値は、 偽なら「0」、真なら「0以外」になるのが仕様です。 だから、真の値が「1」になるか、「3」になるのか、はたまた「-1」になるのかは時と場合によって変わっても問題ないものなので…… バグでも何でもないですね。何で3という数値になるのかはプチコンの実装の方法によるだけの話で、今後勝手に変更されてもおかしくはないです。
3そうだね
プレイ済み
返信[10]
親投稿
なんとなく分かりまちた。 ありがとでぃす!
0そうだね
プレイ済み
返信[11]
親投稿
MIKI ifconfig
えーーーと、 ? 0 or "0" だと type mismatch エラーになりますよね。 ""+0 とか "" も 0=="0" rnd("1") も同様。 smile basic では数値と文字列は厳密に区別しているので、(特殊な場合を除いては)数値と文字列の演算はエラーになります。 (特殊な場合というのは "a"*10 など) || 演算子は、数値に対する演算子と一般に信じられているので、予想としては type mismatch エラーが発生しそうなところ。 でもそうではなかったってことで、「バグじゃね?」という意見ね。 一方で、ver.3.1.0以降「文字列と数値の比較演算で3を返す」という謎の実装もあります ? ""<0 ' 3と表示 ? 0>"" 'type mismatch error これもバグっぽいけど、なにやら敢えて実装した雰囲気も漂っている
2そうだね
プレイ済み
返信[12]
親投稿
Ϊċăņ ďо įт hikahikaru3
右辺に文字列を持ってくるとダメポ
0そうだね
未プレイ