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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0309
シエン値が 0 の時は -1 を、1 の時は 1 を返す処理3解決


シエン

リンク

2010/3/9(Tue) 01:06:46|NO.31118

また質問があるのですが・・・(おそるおそる)

値が 0 の時は -1 を、
値が 1 の時は 1 を返す処理を考えました
(もうひとつはその逆)


#define ctype F2M_T2P(%1) (%1*2)-1 ; False→Minus,True→Plus #define ctype F2P_T2M(%1) (%1*-1)+(%1!1) ; False→Plus, True→Minus

自分としては無い頭をヒネって考えたんですけども、これも
「もっとスマートな方法」があるんじゃないかと考えてしまい・・・

よろしくお願いします。



この記事に返信する


ちぇりっく

リンク

2010/3/9(Tue) 01:18:25|NO.31119

質問してる身の人間が答えるのもアレですが…
1つ目はそれ以上綺麗になりそうになかったので2つ目だけ。


#define ctype F2P_T2M(%1) 1-%1*2 ; False→Plus, True→Minus

さすがにこれ以上縮めれは…するのかな。
あ、あと蛇足ですが「%1*-1」は「-%1」とも書けたりします。



SYAM

リンク

2010/3/9(Tue) 10:34:33|NO.31125


(x==n)*2-1
…とすると、x=n のとき式の値は 1、 それ以外のときは -1 になります。
なので、一つめは (x==1)*2-1 、二つめは (x==0)*2-1 …と書くことができます。
スマートかは置いといてこれだと多少融通が利きますね。
※ "==" と "=" は一緒です。どっちでもOK.

…ところで、このコードだと「それ以外はすべて -1 」としましたが、入力が「 0 以外、かつ 1 以外」の場合は何でもよかったんでしょか。



シエン

リンク

2010/3/9(Tue) 17:31:15|NO.31133

>ちぇりっくさん
修正ありがとうございます。

それにしても自分のをあらためて見ると・・・1つ目を (%1*2)-1 と思いついておきながら、
2つ目で (%1*-1)+(%1!1) に曲がっていった思考が理解不能ですねこりゃ・・・

>SYAMさん
今回の場合は真偽で判定しているだけなので、0か1だけでした。

こっちのほうが確かに他に応用できてナイスですね。何かの拍子に組み込んでみます。
ありがとうございます。


とりあえず、「あの命令を使えば〜」とか「あの演算子で〜」というのも無さそうなので
これにて解決にします。
スッキリしました、ありがとうございました。



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