1:or || 表达式
如果第一个符合条件则直接执行不在验证后面的条件
int main()
{
int a;
a=20;
int b=30;
if(a<20 || b>30)
{
b=90;
}
}
//************************//
.file "b01.cpp"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $20, -4(%rbp) //a=20
movl $30, -8(%rbp) //b=30
cmpl $19, -4(%rbp) //a-19
jle .L2 //a<=19 jmp .L2
cmpl $30, -8(%rbp) //b-30
jle .L3 //b<=30 jmp .L3 otherwhile jmp .L2
.L2:
movl $90, -8(%rbp) //next exe .L3
.L3:
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-11)"
.section .note.GNU-stack,"",@progbits
2:&&表达式
有一个条件不符立即跳出,不在检查下一个条件
int main()
{
int a;
a=20;
int b=30;
if(a<20 && b>30)
{
b=90;
}
}
//************************
.file "b01.cpp"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $20, -4(%rbp) //a=20
movl $30, -8(%rbp) //b=30
cmpl $19, -4(%rbp) //a-19
jg .L2 //a>19 jmp .L2
cmpl $30, -8(%rbp) //b-30
jle .L2 //b<=30 jmp .L2
movl $90, -8(%rbp)
.L2:
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-11)"
.section .note.GNU-stack,"",@progbits
3 not !运算符 前面只要有一个为FALSE则直接执行,不检查后面的条件
int main()
{
int a;
a=20;
int b=30;
if(!(a<20 && b>30))
{
b=90;
}
}
//*************************
.file "b01.cpp"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $20, -4(%rbp) //a=20
movl $30, -8(%rbp) //b=30
cmpl $19, -4(%rbp) //a-30
jg .L2 //a>19 jmp .L2
cmpl $30, -8(%rbp) //b-30
jg .L3 //b-30>0 jmp .L3
.L2:
movl $90, -8(%rbp)
.L3:
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-11)"
.section .note.GNU-stack,"",@progbits
4:?:三元表达式
int main()
{
int a;
a=20;
int b=30;
int c=a>b?a:b;
}
//**************************//
.file "b01.cpp"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $20, -4(%rbp) //a=20
movl $30, -8(%rbp) //b=30
movl -4(%rbp), %eax //eax=20
cmpl -8(%rbp), %eax //a-b
jle .L2 //a<=b jmp .L2
movl -4(%rbp), %eax //eax=20
jmp .L3
.L2:
movl -8(%rbp), %eax //eax=30
.L3:
movl %eax, -12(%rbp)//b=eax
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-11)"
.section .note.GNU-stack,"",@progbits