HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
1106
hC系の&&について6解決


h

リンク

2020/11/6(Fri) 08:30:15|NO.91740

stick ky
if ky&2 & a==1:・・・
HSPの場合は偽になって処理は実行されませんが
以下のようなC系の論理積&&だと実行されますか?

if (ky&2 && a==1)・・・



この記事に返信する


あらや

リンク

2020/11/6(Fri) 10:29:41|NO.91743

>if (ky&2 && a==1)
HSPでも&&や==という書き方も出来ますが、
そういう書き方も出来るというだけで
「&」と「&&」は同じ意味になり、
「=」と「==」も同じになります。

つまりどちらの書き方でも結果は同じです。

実行されない理由を解説させていただくと
>ky&2 & a==1
この式は、優先順位の関係で
【a==1】が最初に比較されて結果が真【1】となり
【ky&2】が次に計算され、論理積の結果【2】となります。(キーが入力されている場合)

この2つをそれぞれ元の比較式に代入すると
ky&2 & a==1 → 2 & 1 になり
2と1の論理積は0なので
0=偽となり、条件式は実行されません。

解決法は論理積だけでなく、比較式も使うことでしょうか

if (ky&2)!=0 & a==1
このような書き方ならば1と1の論理積になるので
期待通りになるかと思います。



h

リンク

2020/11/6(Fri) 17:23:47|NO.91753

あらやさんすみません。意図が伝わらなかったですね。
if (ky&2 && a==1)・・・は
HSPの動作ではなくC系の記述での動作はどうなるかの質問なんです。
ちなみにHSPだとビットシフト使ってますがどうでしょうか?
if (ky&2)>>1 & a==1:・・・



あらや

リンク

2020/11/6(Fri) 21:07:52|NO.91755

Cでの動作ということでしょうか。

>if (ky&2 && a==1)
Cでも同じ過程で常に偽になるかと思います。

>if (ky&2)>>1 & a==1
これも真になるので問題無いかと。



h

リンク

2020/11/6(Fri) 21:49:13|NO.91756

ありがとうございます。
Cも同じ結果なんですね。わかりました。(^^)
C系の&と&&は優先順位が違うくらいのものでしかないのですね。



あらや

リンク

2020/11/6(Fri) 23:11:55|NO.91757

すみません間違えました。

Cでは真&&真の判定になるので
真となり、実行できます。

(VS2017で確認)



h

リンク

2020/11/7(Sat) 08:34:11|NO.91759

そうでしたか。
私も処理は実行されるような気がしていました。(^^)
ありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.