- ベストアンサー
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」と表示されます。 何が原因なのでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
比較演算子なら > または < です 重ねて >> または << としてしまうと シフト演算子になってしまいます したがって x >> y としてしまうと xをyビット右シフトすることになり この演算結果が 0になら無い限り else節は実行されません xが4 yが2の場合なら else説が実行されるでしょう
その他の回答 (1)
- koko_u_
- ベストアンサー率18% (459/2509)
大小関係の代わりにシフト演算子が使われているから。
お礼
勘違いをしていました。ありがとうございます。
お礼
勘違いしていました。ありがとうございます。