1逗号运算符和逗号表达式
1.1逗号表达式格式:表达式1,表达式2,表达式3,...,表达式n;
该表达式的功能是:先计算表达式1,再计算表达式2,最后计算表达式 n,最后一个表达式的值为此逗号表达式的值。
1.2逗号表达式的优先级:最低。
1.3逗号表达式的值:
例子代码:
#include "stdio.h" main(){ int a,b,c; a=1,b=2,c=a+b+3; printf("%d,%d,%d\n",a,b,c); c=(a++,a+=b,a-b); /*变量c保存逗号表达式的值*/ printf("%d,%d,%d\n",a,b,c); /*逗号表达式的作用为顺序求值*/ }
输出结果如下:
1,2,6
4,2,2
2关系运算符和关系表达式
2.1C语言中的真值和假值:C语言中没有逻辑型数据,所以C语言规定,用整型常量1来表示真值,所有非0的表达式和常量的逻辑值都为1,用整型常量0表示假值,只有表达式的值为0的常量和表达式的逻辑值为0。
关系表达式例子代码:
#include "stdio.h" main(){ char x='m',y='n'; int n; n=x<y; /*取关系表达式x<y的值*/ printf("%d\n",n); n=x==y-1; /*取关系表达式x==y-1的值*/ printf("%d\n",n); n=('y'!='Y')+(5<3)+(y-x==1); /*取关系表达式x==y-1的值*/ printf("%d\n",n); }
程序运行结果:
1
1
2
关系表达式参加算术运算:
#include "stdio.h" main(){ int a,b,c; a=b=c=10; /*变量a,b,c赋初值*/ a=b==c; printf("a=%d,b=%d,c=%d\n",a,b,c); /*注意等号与赋值号的区别*/ a=(b+(c++>2)); printf("a=%d,b=%d,c=%d\n",a,b,c); /*关系表达式的值可以参加运算c++>2成立,值为1和b相加值放到a中存放*/ a=b>c*100; printf("a=%d,b=%d,c=%d\n",a,b,c); /*利用关系表达式计算要注意运算的优先级*/ }
程序运行结果:
a=1,b=10,c=10
a=11,b=10,c=11
a=0,b=10,c=11
3逻辑运算符和逻辑表达式
3.1基本逻辑运算符包括:单目运算符!,双目运算符&&、||。
逻辑与运算符例子代码:
#include "stdio.h" #define PI 3.1415926 main(){ int m,n; int k; k=(m=0)&&(m=1); printf ("%d,%d\n",m,k); k=(m=1)&&(m=0); printf ("%d,%d\n",m,k); k=(m=2)&&(m=1)&&(m=0); /*多层逻辑与运算的规则测试*/ printf ("%d,%d\n",m,k); m=0,k=0; n=k++&&m++; printf ("%d,%d,%d\n",k,m,n); m=0,k=0; n=m++&&k++; /*测试表达式k++&&m++与m++&&k++*/ printf ("%d,%d,%d\n",k,m,n); }
程序运行结果:
0,0
0,0
0,0
1,0,0
0,1,0
逻辑或运算符例子代码:
#include "stdio.h" main(){ int m,n; int k; k=(m=0)||(m=1); /*逻辑或运算的计算规则*/ printf ("%d,%d\n",m,k); k=(m=1)||(m=0); printf ("%d,%d\n",m,k); k=(m=2)||(m=1)||(m=0); /*多层逻辑或运算的规则测试*/ printf ("%d,%d\n",m,k); m=0,k=0; n=++m||++k; printf ("%d,%d,%d\n",k,m,n); m=0,k=0; n=++k||++m; printf ("%d,%d,%d\n",k,m,n); /*测试表达式++k||++m与++m||++k+*/ }
程序运行结果:
1,1
1,1
2,1
0,1,1
1,0,1
逻辑与和逻辑或混合运算例子代码:
#include "stdio.h" main(){ int m,k; k=(m=0)||(m=1)&&(m=2); /*表达式理解为(m=0)||((m=1 )&&(m=2))*/ printf ("%d,%d\n",m,k); k=(m=2)||(m=1)&&(m=0); /*表达式理解为(m=2)||((m=1)&&(m=0))*/ printf ("%d,%d\n",m,k); k=(m=2)&&(m=1)||(m=0); /*表达式理解为((m=2)&&(m=1))||(m=0)*/ printf ("%d,%d\n",m,k); k=(m=0)&&(m=1)||(m=2); /*表达式理解为((m=0)&&(m=1))||(m=2)*/ printf ("%d,%d\n",m,k); }
程序运行结果:
2,1
2,1
1,1
2,1
4条件运算符和条件表达式
4.1条件运算符"?:"是C语言中唯一的的三目运算符,优先级高于赋值运算
表达式语法: 表达式1?表达式2:表达式3
其执行顺序是:先求解表达式1,若为0则执行表达式2,否则执行表达式3。
例子代码:
#include "stdio.h" main(){ char ch; scanf("%c" , &ch); /* 输入一个字符,赋给变量ch */ ch=(ch>='A'&&ch<='Z')?(ch+'a'-'A'):ch; /* 当字符为大写字母时,将其变为小写字母 */ printf("\n%c",ch); }
5sizeof运算符
5.1sizeof是C语言的一种单目运算符,运算对象是变量名、表达式或数据类型标示符。功能是以字节形式给出操作数的存储大小。
5.2语法格式:sizeof(表达式) 或 sizeof 表达式 或sizeof(数据类型)
6取地址运算符
6.1取地址运算符的运算对象只能是变量,运算结果为变量的存储地址。
7几种运算混合运用
例子代码:
#include "stdio.h" main(){ int x,y=1,z; x=((9+6)%5>=9%5+6%5)?1:0; /*((9+6)%5>=9%5+6%5)等价于(((9+6)%5)>=(9%5+6%5))其值为0*/ printf(" x=%d\n",x); y+=z=x+3; /* y+=z=x+3等价z=x+3,y=y+z*/ printf(" y=%d\t z=%d\n",y,z); x=y=z=1; --x&&++y||z++; /*混合的逻辑与和逻辑或运算*/ printf(" x=%d\t y=%d\t z=%d\n",x,y,z); }
程序运行结果:
x=0
y=4 z=3
x=0 y=1 z=2