与运算(&&)又称“简洁与”或者“截断与”,听名字不大能听明白它其中的意思,众所周知,当语句“a&&b”中a为真且b为真时整个语句才为真,其它情况全为假,“简洁与”的意思就是当a语句为假时就不再执行后面的b语句,但是整个语句仍为假;
举个例子说明一下:
#include<stdio.h> int mian() { int a=1,b=5,c=5; if(a>1&&b++) { } printf("b=%d\n",b); if(a>=1&&c++) { } printf("c=%d\n",c); return 0; }如果不清楚与运算符(&&)的话可能就会认为打印出来的b的值会是6,但是实际打印出来的值仍为5,就是因为与运算是一种简洁与,当&&前面的语句为假时则不再执行后面的语句,只有当“与(&&)”前面的语句为真时才会执行后面的语句,所以c的值为6。
b=5 c=6或运算(||)同与运算一样也称“简洁或”或者“截断或”,当语句“a||b”中a语句为假且b语句也为假时整个语句才为假,其它情况全为真,那么简洁或的意思就和简洁与的意思相同,即当a语句为真时不再执行后面的b语句,整个语句仍为真;
同样也来一个例子:
#include<stdio.h> int main() { int a=1,b=5,c=5; if(a>1||b++) { } printf("b=%d\n",b); if(a>=1||c++) { } printf("c=%d\n",c); return 0; }同样的,如果不清楚或运算符的使用,就回认为打印出c的值为6,实则仍为5,因为在这个程序中“或(||)”前面的语句为真,则不再后面的语句,c的值也就不变,只有当“或(||)”之前的语句为假时才执行后面的语句,所以b的值为6.
b=6 c=5非运算符通俗来说就是将真的变为假,假的变为真,是一个单目运算符,如:2<5为真则!(2<5)为假,并且在单目运算符中,只有
“++”和“--”(上一篇博客已经介绍过)运算符可以改变变量的值,那也就是说非(!)运算符是不能改变变量的值的;
上例子:
#include<stdio.h> int main() { int a=10; bool t=trul,s=false; //布尔类型,为假时输出0,为真时输出1;所有的0都为假,非0都为真; t=!!a; s=!a; printf("a=%d\nt=%d\ns=%d\n",a,t,s); return 0; } a=10 t=1 s=0此程序中a为真,!a为假,则s输出0,!a为假,则!!a为真,t输出1,非运算符不变变量值,则a仍为10.
*****逻辑运算符与其它运算符优先级:赋值运算符(=) < &&和|| < 关系运算符 < 算数运算符 < 非(!)