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