本帖最后由 736010695 于 2014-11-10 10:53 编辑
逻辑运算:
运算结果只有两个:真(输出结果是1)和假(输出结果是0)
分类:
1、逻辑与,表示方式为:条件1&&条件2,当左右两个条件都满足时,结果是真,输出为1,反之就输出为0
2、逻辑或,表示方式为:条件1||条件2,当左右两个条件一个满足时,结果就为真,输出为1,当||左右两个条件都不成立结果就为假,输出为0
3、逻辑非,表示方式为:!条件,做条件为真时输出0,当条件为假时输出1,也就是说“取反”
#include<stdio.h>
int main()
{
//逻辑与:
int a=10>3 && 7<6;
printf("a=%d\n", a);、、结果是0,原因:7<6不成立,只要有一个不成立,在逻辑与里就为假,输出结果是
int a=10 && 7;//输出结果是1,因为10和7都是非0数据,表示都是真,输出结果是1(输出时会警告的)
int a=10&&0;//输出结果是0,因为右边0是假,所以输出结果是0
//在逻辑与里,如果&&左边条件成立,再检测右边条件,如果左边条件不成立就直接输出0,表示不成立
int a=10;
int b=10;
int c=a>5 && ++b>=11;
printf("a=%d,b=%d,c=%d\n",a, b, c);
//输出结果是a=10,b=11,c=1,原因:&&左边是a>5是成立的,&&右边++b>=11,因为++在前面先运算b+1,所以b=11,大于等于11也是成立的左右都成 立,所以c的值是1
int c=a<5 && ++b>=11;
printf("a=%d, b=%d, c=%d", a, b, c);
/*这个输出结果是a=10,b=10,c=0,原因:a的值是10,所以a<5是不成立的,&&后的就不在运算,直接输出结果为假,故此c为0,因为&&后面没有运算, 所以b的值还是以前的值,故此输出结果是a=10,b=10,c=0)*/
//逻辑或:在逻辑或里,如果||左边条件成立右边条件就不在运算直接输出1,表示成立
int e=0||10;
print("a=%d\n");/*输出结果是1.因为&&左边是假,但右边是真,只要一个是假逻辑或就成立,输出结果就是1*/
int f=10;
int g=10;
int h=(f>5)||(g++-10);
printf("f=%d,g=%d/h=%d", f, g, h);
//这个输出结果是f=10,g=10,h=1,原因:因为a的值是10,所以||左边成立,||右边就不在运算直接输出h为1,表示成立,因为||右边没有运算所以g还是原 来的数值
int h=f<5||g++-10;
printf("f=%d, g=%f, g=%d", f, g, h);
/*这个输出结果是f=10,g=11,h=0,原因:h的值是10,a<5不成立,所以运算||后面的成立否,g++因为++在g前面所以g++-10值是0,但此刻g的值变成了11,两个都不成立所以h值为0*/
//逻辑非:取反
int j=!(10>8);
print("j=%d\n",j);
//这个输出结果是0,因为10>8是成立的,反过来后就是不成立的,所以输出为0
int j=!10;
print("j=%d\n",j);
//这样写也是允许的,输出结果是0,因为10为非0,表示真,反过来后就是假
int j=!10>8;
print("j=%d\n",j);
//根据关系符的优先等级,先算!10结果是0,再算0>8,不成立,所以结果是0
int j=!!!10;
print("j=%d\n",j);
//这样写也是允许的
return 0;
}
|