このソースは簡略化できますか?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
LisetteLander

このソースは簡略化できますか?

#1

投稿記事 by LisetteLander » 14年前

rend=GetRand(1);
if(rend==0){
rend==-1;
}
else{
rend==1;
}

rendにランダムで数値を1か0を入力し、
それぞれ符号を反転させるための変数として使います。
これ以上簡単になりませんか?

LisetteLander

Re:このソースは簡略化できますか?

#2

投稿記事 by LisetteLander » 14年前

あ、すいません、==ではなく=でした。。

たかぎ

Re:このソースは簡略化できますか?

#3

投稿記事 by たかぎ » 14年前

何をもって簡単と考えるかによりますが、単に行数を短くしたいのであれば...

rend = (GetRand(1) << 1) - 1;

でどうでしょうか?

みけCAT

Re:このソースは簡略化できますか?

#4

投稿記事 by みけCAT » 14年前

GetRand(1)が0か1を返すのであれば
rend=GetRand(1)*2-1;
でどうですか?

LisetteLander

Re:このソースは簡略化できますか?

#5

投稿記事 by LisetteLander » 14年前

解決しました!

LisetteLander

Re:このソースは簡略化できますか?

#6

投稿記事 by LisetteLander » 14年前

みけCAT 様、たかぎ様、ありがとうございます!
みけCAT様ので実践してみます。

ぱっと出る発想すごいです・・・

白い時空

Re:このソースは簡略化できますか?

#7

投稿記事 by 白い時空 » 14年前

解決したみたいですが、とりあえず書いておきます。

みけCATさん、たかぎさんは数式で解決していますが、
if文は、?と:を使った条件演算子で短縮できます。
(条件式)?(真の時):(偽の時)という風に使います。

rend = GetRand(1)?1:-1;

今回の場合はこうなります。

LisetteLander

Re:このソースは簡略化できますか?

#8

投稿記事 by LisetteLander » 14年前

白い時空様、レスありがとうございます。

えっと、?と:を使うことでif文と同じ効果がでるということでしょうか?
GetRandで取得した数値が1の場合真に分岐、-1のときに偽に分岐ということですか?
その場合、分岐したあとの計算式などはどこらへんに・・・

解釈その2として、1のときのみrendに格納するというのがあるのですが・・・

box

Re:このソースは簡略化できますか?

#9

投稿記事 by box » 14年前

>rend = GetRand(1)?1:-1; 

は、

if (GetRand(1)) {    /* if (GetRand(1) != 0) {  のこと */
    rend = 1;
}
else {
    rend = -1;
}

と等価です。

白い時空

Re:このソースは簡略化できますか?

#10

投稿記事 by 白い時空 » 14年前

boxさん。補足ありがとうございます。

すいません。ちょっと、説明不足でした。
条件式がGetRand(1)だけになっていますが、
0は偽、それ以外の数字は真という決まりになっているので
GetRand(1)が1なら真、0なら偽として扱われます。

まあ、これも短縮する方法の一つですね。


?と:を使うこの方法は、今回のような簡単な分岐の場合に使用できます。
if文で代用可能なので、無理に使う必要はないですが、覚えておけば今回のように短縮できて便利ですね。

LisetteLander

Re:このソースは簡略化できますか?

#11

投稿記事 by LisetteLander » 14年前

なるほど、ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る