天天看點

算數運算符和算術表達式

算數運算符和算術表達式

用算數運算符和括号将運算對象(也稱操作數)連接配接起來的、符合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;