在c语言中对真假的处理是:
非零是真,用1表示;
零是假,用0表示;
表达式1 && 表达式2;
当表达式1 和 表达式2 都正确是 才输出1;
若是表达式1 或 表达式2 有一个是假的,就输出0;
先来看两个小程序
#include<stdio.h>
int main()
{
int i = 3,m;
m = (3>2) && (i = 4);
printf("i = %d,m = %d\n",i,m);
return 0;
}
输出的是:i = 4, m = 1
#include<stdio.h>
int main()
{
int i = 3,m;
m = (2>3) && (i = 4);
printf("i = %d,m = %d\n",i,m);
return 0;
}
输出的是:i = 3,m = 0
这两个程序的区别就是 运算符&&前面的表达式 不同,导致的结果大相径庭;
为什么会这样呢?
由c语言对真假的处理容易理解 m 的值; 至于i的值,前面说过只有当 && 前后的表达式都是正确时才输出1,当编译器 读到 表达式1(2>3)时,如果是错误的,那么编译器就不会继续读 表达式2,因为此时 m 的值已经确定了;所以 i 的值 就是如此。
至于 || 运算符和 && 运算符是同样的道理。
#include<stdio.h>
int main()
{
int i,m;
i = 3;
m = (2<3) || (i = 0);
printf("i = %d,m = %d\n",i,m);
return 0;
}
输出的是:i = 3,m = 1
#include<stdio.h>
int main()
{
int i,m;
i = 3;
m = (2>3) || (i = 4);
printf("i = %d,m = %d\n",i,m);
return 0;
}
输出的是:i = 4,m = 1
#include<stdio.h>
int main()
{
int i,m;
i = 3;
m = (2>3) || (i = 0);
printf("i = %d,m = %d\n",i,m);
return 0;
}
输出的是:i = 0,m = 0