if(A==0)&&(B==0)||(C==0)||(D==0)
とした場合処理はどのよようになるのでしょうか。
ifの使い方
Re: ifの使い方
演算子には優先順位というものがあります。
http://ja.wikipedia.org/wiki/C%E3%81%A8 ... 7%E5%AD%90
それに沿って考えると、
( (A==0) && (B==0) ) || C==0 || D==0
と同じです。
&&の方が優先順位が高いので、先に評価されます。
http://ja.wikipedia.org/wiki/C%E3%81%A8 ... 7%E5%AD%90
それに沿って考えると、
( (A==0) && (B==0) ) || C==0 || D==0
と同じです。
&&の方が優先順位が高いので、先に評価されます。
Re: ifの使い方
アセンブリを見てみるのもいいことです。
このコードをコンパイル(gcc -S -o if_dousa.s if_dousa.c)すると、こうなりました。
このうち、「subl $40, %esp」の次の行から「leave」の前の行までが主な処理の内容です。
日本語にすると、
#include <stdio.h>
void test(void) {
int A=1,B=2,C=3,D=4;
if((A==0)&&(B==0)||(C==0)||(D==0))puts("test");
}
.file "if_dousa.c"
.section .rdata,"dr"
LC0:
.ascii "test\0"
.text
.globl _test
.def _test; .scl 2; .type 32; .endef
_test:
LFB6:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $40, %esp
movl $1, -12(%ebp)
movl $2, -16(%ebp)
movl $3, -20(%ebp)
movl $4, -24(%ebp)
cmpl $0, -12(%ebp)
jne L2
cmpl $0, -16(%ebp)
je L3
L2:
cmpl $0, -20(%ebp)
je L3
cmpl $0, -24(%ebp)
jne L1
L3:
movl $LC0, (%esp)
call _puts
L1:
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
LFE6:
.def _puts; .scl 2; .type 32; .endef
日本語にすると、
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
- 記事: 44
- 登録日時: 11年前
Re: ifの使い方
日本語にしてみようと思いましたが、私もさっぱりでしたので、プログラムで解決することにしました。
結果は以下のようになりました。
A=0,B=1,C=1,D=1の時と、
A=×1,B=0,C=1,D=1の時と、
A=×1,B=1,C=1,D=1の時は実行されません。
それ以外は実行されます。
力技ですみません(*´ω`*)
#include <stdio.h>
void main(){
for( int A=0; A<2;A++ )
for( int B=0; B<2;B++ )
for( int C=0; C<2;C++ )
for( int D=0; D<2;D++ )
if((A==0)&& (B==0)|| (C==0)|| (D==0))
printf("○%d,%d,%d,%d\n",A,B,C,D);
else
printf("×%d,%d,%d,%d\n",A,B,C,D);
}
○0,0,0,0
○0,0,0,1
○0,0,1,0
○0,0,1,1
○0,1,0,0
○0,1,0,1
○0,1,1,0
×0,1,1,1
○1,0,0,0
○1,0,0,1
○1,0,1,0
×1,0,1,1
○1,1,0,0
○1,1,0,1
○1,1,1,0
×1,1,1,1
A=×1,B=0,C=1,D=1の時と、
A=×1,B=1,C=1,D=1の時は実行されません。
それ以外は実行されます。
力技ですみません(*´ω`*)
ただの超絶右留斗羅天才プログラマーです。同人ゲーム制作進捗度:7%
Re: ifの使い方
本当ですか?Loki さんが書きました: &&の方が優先順位が高いので、先に評価されます。
(A==0) || (B==0) && (C==0)
はどう解釈しますか?
Re: ifの使い方
エラーになるんじゃないかな?usoire さんが書きました:if(A==0)&&(B==0)||(C==0)||(D==0)
とした場合処理はどのよようになるのでしょうか。
non
Re: ifの使い方
そうでした!これが正解でした!!non さんが書きました:エラーになるんじゃないかな?usoire さんが書きました:if(A==0)&&(B==0)||(C==0)||(D==0)
とした場合処理はどのよようになるのでしょうか。
コンパイラの処理を聞いている、ということでしょうか。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)