"&&"运算符:当左边所给表达式或变量为0时,不再计算右侧,整个表达式为零。
//&&
void Function(int a,int b,int c)
{
if(a > 1 && b > 1 && c > 1)
{
printf("ok\n");
}
else
{
printf("Error");
}
//0040B518 cmp dword ptr [ebp+8],1 参数a和1比较
//0040B51C jle Function+39h (0040b539) a小于等于1则跳转到0040b539(else),下面的不执行
//0040B51E cmp dword ptr [ebp+0Ch],1 若ebp+8(a)大于1则继续执行参数b和1比较
//0040B522 jle Function+39h (0040b539) b小于等于1则跳转到0040b539(else),下面的不执行
//0040B524 cmp dword ptr [ebp+10h],1 若ebp+0c(b)大于1则继续执行参数c和1比较
//0040B528 jle Function+39h (0040b539) c小于等于1则跳转到0040b539(else),下面的不执行
//0040B52A push offset string "ok\n" (0041f10c)
//0040B52F call printf (0040b780)
//0040B534 add esp,4
//0040B537 jmp Function+46h (0040b546)
//0040B539 push offset string "Error" (0041f130)
//0040B53E call printf (0040b780)
//0040B543 add esp,4
}
只有所有条件都成立时才会继续执行语句
"||"运算符:两个或多个布尔值中任何一个值为TRUE(或者都为TRUE),则返回值为TRUE。如果多个运算符都是FALSE,则返回值为FALSE。
void Function(int a, int b, int c)
{
if(a > 1 || b > 1 || c > 1)
{
printf("ok\n");
}
//0040B518 cmp dword ptr [ebp+8],1 参数a与1比较
//0040B51C jg Function+2Ah (0040b52a) 若a大于1则跳转到40b52a(执行部分),若不成立顺序执行
//0040B51E cmp dword ptr [ebp+0Ch],1 a小于等于1时继续用参数b和1比较
//0040B522 jg Function+2Ah (0040b52a) 若B大于1则跳转到40b52a,不成立继续执行
//0040B524 cmp dword ptr [ebp+10h],1 b小于等于1时继续c和1比较
//0040B528 jle Function+37h (0040b537) 若C不成立,则直接跳过执行部分
//0040B52A push offset string "ok\n" (0041f10c)
//0040B52F call printf (0040b780)
//0040B534 add esp,4
}
“!“运算符:
" !0” 这个逻辑表达式的值为1.(判断的这个数为0,成立,则其表达式的值为1)
" !1” 这个逻辑表达式的值为0.(判断的这个数非0,不成立,则其表达式的值为0)
void Function()
{
int a = 1;
if(!a)
{
printf("ok");
}
else
{
printf("Error");
}
}