• ベストアンサー

ifについて

C言語を最近学び始めました。 以下をコンパイルし、実行しても予期せぬ結果になってしまい、困っています。 #include <stdio.h> #include <time.h> #include <stdlib.h> void retry(int); int main(void); int main(void) { int x,y,yn; srand(time(NULL)); x = rand()%6 +1; //Player y = rand()%6 +1; //CPU printf("Player:%d\n",x); printf("CPU:%d\n",y); if(y<<x){printf("Player > CPU\n");} else if(x<<y){printf("Player < CPU\n");} else {printf("Player = CPU\n");} retry(yn); return 0; } void retry(int yn) { printf("\nRetry ?(Yes=1/No=0)>"); scanf("%d",&yn); if (yn==1){printf("\n\n");getchar();main ();} else if(yn==0){printf("\n\nend");exit(0);} else {retry(yn);}; } サイコロを2人が振り、目が大きいほうが勝ちというものなのですが、 「Player:3 CPU:6 Plyaer>CPU」 といった具合にx,yの値に関わらず「Plyaer>CPU」と表示されます。 何が原因なのでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

比較演算子なら > または < です 重ねて >> または << としてしまうと シフト演算子になってしまいます したがって x >> y としてしまうと xをyビット右シフトすることになり この演算結果が 0になら無い限り else節は実行されません xが4 yが2の場合なら else説が実行されるでしょう

yata16
質問者

お礼

勘違いしていました。ありがとうございます。

その他の回答 (1)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

大小関係の代わりにシフト演算子が使われているから。

yata16
質問者

お礼

勘違いをしていました。ありがとうございます。

関連するQ&A