算數運算符和算術表達式
用算數運算符和括号将運算對象(也稱操作數)連接配接起來的、符合C文法規則的式子,稱為C算術表達式。
運算對象包括常量、變量、函數等
各類數值型資料間的混合運算
10+‘a’+i*f-d/e
1.先将‘a’轉換成整數97,運算結果為107
2.先将i與f轉為double型,運算結果為double型
3.先将107轉換成雙精度型,結果為double型
4.最終結果為double型
i為整型 f為float型 d為double型 e為long型
練習:
寫出下面程式的運作結果
int main()
{ int i=6,y=4,z=2;
printf("%d\n",i/y%z); 運作結果:
printf("%f\n",2.5+1*7%2/4); 1
return 0; 2.500000
}
指派運算符和指派表達式
簡單指派運算符:=
格式:變量=表達式;
先計算運算符右邊的表達式,然後将其值賦給等号左邊的變量。
例子:x=x+10;y=x*x+x;
C語言指派運算符與數學中的等号含義有着本質的不同。
指派過程中的類型轉換
#include<stdio.h> 運作結果:5 23.000000
void main()
{ int i;
float f;
i=5.34;
f=23;
printf("%d%f\n",i,f);
}
1.實型資料(包括單、雙精度)賦給整型變量時,舍棄實數的小數部分。
2.整形資料賦給單、雙精度變量時,數值不變,但以浮點數形式存儲到變量中。
3.長度相同的有符号與無符号整型數間,原樣指派(但數值有時會有變化)。
#include<stdio,h>
void main()
{ unsigned a;
int b=-1;
a=b;
printf("%d_>%u\n",b,a);
a=65534u; 運作結果:
b=a; -1_>65535
printf("%d_>%u\n",b,a); -2_>65534
}
4.char、int、long等類型的轉換
a.”短“資料賦給”長“變量
符号擴充:若最高位為1(負數),則變量高位元組位補1;反之,補0.
#include<stdio.h>
void main() 運作結果:
{ char c; i=43
int i; i=-2
c=43;
i=c;
printf("i=%d\n",i);
c='\376';
i=c;
printf("i=%d\n",i);
}
b.”長“資料賦給”短“變量
隻将資料的低位元組位原封不動送到變量中(資料有可能有差錯)。
#include<stdio.h>
void main()
{ int i;
long L=6324232L;
i=L;
printf("i=%d,L=%ld\n",i,L);
}
指派運算符和指派表達式
複合算術指派運算符
名稱 運算符 例子:
加指派 += a+=b a=a+b
減指派 -= a-=b a=a-b
乘指派 *= a*=b a=a*b
除指派 /= a/=b a=a/b
模指派 %= a%=b a=a%b
操作符左邊隻能是變量,不能是變量和表達式
指派運算符的結合性是“自右至左”。
例子:已知x=10,則x+=x-=60的值為?
先做x-=60,等價于x=x-60,這時x的值變為10-60,
即-50;
然後再做x+=x,等價于x=x+x,則x的值變為-50+(50),
即-100。是以最後的結果為-100。
複合位運算指派運算符
按位與指派運算符&=, 如a&=b, 等價于a=a&b,
按位或指派運算符|=, 如a|=b, 等價于a=a|a,
按位異或指派運算符^=, 如a^=b, 等價于a=a^b,
位右移指派運算符>>=, 如a>>=b, 等價于a=a>>b,
位左移指派運算符<<=, 如a<<=b, 等價于a=a<<b,
指派表達式
由指派運算符講一個變量和一個表達式連接配接起來的式子,稱為“指派表達式”。
形式:變量-=表達式 如:a=5、a=(b=5)(右結合)
計算過程:1.計算指派運算符右側“表達式”的值,
2.将計算結果賦給左側的變量,
3.指派表達式的值就是被指派的訓示變量的值。
例如:a=b=c=5 //表達式值為5,a,b,c值為5
a=(b=5) //b=5;a=5
a=5+(c=6) //表達式值11,c=6,a=11
a=(b=4)+(c=6) //表達式值10,a=10,b=4,c=6
a=(b=10)/(c=2) //表達式值5,a=5,b=10,c=2
例子:a=12;
a+=a-=aa //a=-264等價于a=a+(a=a-(aa))
例子:int 2;
a%=4-1; //a=0 等級于a=a+(a=a*(a=a-(a=a*3)))
a+=a*=a-=a*=3;