1運算符和表達式
1.1運算符分類:
算數運算符:用於算數運算,包括+、-、*、/等。
關系運算符:用於比較運算,包括>、<、==、!=等。
邏輯運算符:用於邏輯運算,包括&&、||、!三種。
位操作運算符:按二進制位對位運算,包括&、|、~、<<等。
賦值運算符:用於賦值運算,包括=、+=、&=等。
條件運算符:三目運算符,用於條件求值(?:).
逗號運算符:用於把若干表達式組合成一個表達式(,)。
指針運算符:用於取內容*和用於取地址&。
求字節數運算符:用於計算數據類型所占的字節數sizeof。
特殊運算符:()、[]、成員(->,.)等。
1.2運算順序
A.函數計算優先。
B.其次是強制類型轉換。
C.自增、自減和取反次之。
D.先乘除再加減。
E.有括號先算括號內的。
注:表達式中出現連續兩個運算符時最好用空格隔開,如a+++b要寫成:a++ +b或a+ ++b。
2數據類型轉換
2.1強制類型轉換:就是顯示的將表達式轉換成所需類型。
方式1:(類型名)(表達式).
方式2:(類型名)表達式.
例:強制類型轉換。
#include "stdio.h"
#define PI 3.1415926
main(){
int m,n;
float x,y;
x=2.5;
y=4.8;
m=(int)(x+y); /*強制將浮點型轉換成整型*/
n=(int)x+m/3; /*強制將x轉換成整型*/
m=n%4; /*整型取余*/
x=x+y;
printf("m=%d,n=%d,x=%f,f=%f",m,n,x,y);
}
注:強制類型轉換不會改變原來的變量和表達式的類型屬性,只是轉換成所 需類型使用。
2.2隱含類型轉換:整型、單精度型和雙精度型的不同數值類型可以混合運 算,在運算過程中就有隱式類型轉換。
隱式類型轉換的規則就是:從低向高轉換,例如char和short可以轉 換為int。
3算術運算符與算術表達式
3.1基本算術運算符:包括+、-、*、/、%五個運算符。
3.2特殊的算術運算符:自加和自減。
前綴形式:先對運算對象自增或自減,再引用運算對象的值作為表達式 的值。
後綴形式:先引用運算對象的值作為表達式的值,再對運算對象自增或 自減。
示例:++a 等價於a=a+1,--a等價於a=a-1;
a++ 等價於a=a+1,a--等價於a=a-1;
注:可以看出單獨使用時沒有區別,但是在表達式中對表達式影響不同。
例子代碼:
#include "stdio.h"
#define PI 3.1415926
main(){
int i=6,j=6,k=6, h=6,m,n,x,y;
m=i++; /*後綴形式自加*/
n=++j; /*前綴形式自加*/
x=k--; /*後綴形式自減*/
y=--h; /*後綴形式自減*/
printf("\n i=%d, m=%d, j=%d, n=%d", i, m, j, n);
printf("\n k=%d, x=%d, h=%d, y=%d", k, x, h, y);
}
4賦值運算符與賦值表達式
4.1簡單的賦值運算符
簡單賦值的作用就是將一個表達式的值賦給一個變量存儲起來,例如a=4;
注:賦值運算的左邊必須是變量;
賦值運算優先級比較低,僅優先於,;
4.2復合賦值運算符
就是把運算和賦值結合在一起,例如+=、-=等。
例如:m+=3 等價於m=m+3;
4.3賦值表達式的運算
使用表達式應該注意的情況:
4.3.1復合的賦值運算符。
例子代碼:
#include "stdio.h"
#define PI 3.1415926
main(){
int x=2,y,z;
x*=3+2; /*等價於x=x*(3+2)*/
printf("(1)x=%d\n",x);
x*=y=z=4; /*等價於y=z=4,x=x*y*/
printf("(2)x=%d\n",x);
x=y=1;
z=x++-1; /*等價於y=x-1,x=x-1*/
printf("(3)x=%d***z=%d\n",x,z);
z=x++*++y; /*等價於y=y+1,z=x*y,x=x+1*/
printf("(4)x=%d***y=%d***z=%d\n",x,y,z);
}
4.3.2賦值轉換:指運算符兩邊類型不同但都是數值或字符,C就會自動轉換相應類型。
例子代碼:
#include "stdio.h"
#define PI 3.1415926
main(){
int a,b=322;
float x,y=8.88;
char c1='k',c2;
a=y;
x=b;
a=c1;
c2=b;
printf("%d,%f,%d,%c",a,x,a,c2);
}
摘自letthinking的專欄