各類運算子和計算方法,優先順序

weixin_33860722發表於2016-12-13

1.關係運算子:<,>,<=,>=,==,!=

算術運算子>關係運算子>邏輯運算子(&&、||)

運算結果為bool型:true,false

邏輯運算子:&&(邏輯與)、||(邏輯或)、!(邏輯非)

運算子結果為bool型:true,false

&&(並且):同真為真,否則為假.先算前面的式子,前面的式子為假,後面式子不參與運算

||(或者):同假為假,否則為真,先算前面的式子,前面的式子為真,後面式子不參與運算

!:真則為假,假則為真

?:條件運算子;

a?b:c  a為真,結果為b,否則為c


//條件運算子:大寫變小寫,小寫變大寫

char c;

cout<<"請鍵盤中輸入一個字母"<<endl;

cin>>c;

c=c >= 'A' && c <= 'Z' ?c+('a'-'A'):c+('A'-'a');

cout<<"c="<<endl;


3.位運算:2進位制補碼的形式參與運算

計算機中資料都是以補碼的形式儲存的。

原碼:最高位表示符號位,其他位表示大小

反碼:正數的反碼與原碼相同,負數:符號位不變,其他按位取反

補碼:正數的補碼與原碼相同,負數:反碼+1

補碼的補碼就是原碼

步驟:

1.轉換成2進位制的原碼

2.原碼轉換成補碼

3.進行位運算

4.位運算的結果(補碼)轉換成原碼

 2進位制轉換成10進位制

~:按位非,1變0,0變1.

<<左移:低位補0;

>>右移:正數高位補0,負數高位補1;

&(按位與):同1為1,否則為0;

^(按位異或):同則為0,異則為1;

|(按位或):有1為1,否則為0;



int main()

{

int m=5;

m=~m;

/*

1.5轉換成2進位制原碼  00000101

2.5的原碼轉換成補碼:00000101

3.~的計算: 11111010(補碼)

4.運算結果轉換成反碼(負數):10000101

5.反碼轉補碼+1: 10000110

6.轉換成10進位制:      -6

*/

m=m<<3;

/*

1.-6轉換成2進位制原碼:  10000110

2.-6的原碼轉換成反碼:  11111001

3.-6的反碼轉換成補碼:  11111010

4.<<3的計算:   11010000(補碼)

5.運算結果轉換成反碼:  10101111

6.反碼轉補碼+1:   10110000

7.轉換成10進位制:      -48

*/

a=a<<5;//看成是該數*2的5次方倍(結果注意資料溢位)

a=a&b;

/*

1.a和b轉換成2進位制原碼:  11000000 00010010

2.a和b的原碼轉換成反碼:  10111111 00010010

3.a和b的反碼轉換成補碼:  11000000 00010010

4.a&b的計算: 11000000

& 00010010

00000000(補碼)

5.運算結果轉換成反碼:  00000000

6.反碼轉補碼+1:   00000000

7.轉換成10進位制:      0

*/



運算子:算術運算子、自加自減、

賦值運算子(左邊必須是變數):=,+=,*=

a/=b+2;等價於a=a/(b+2)

逗號運算子:,

//逗號表示式:由逗號運算子組成的式子:從左往右依次計算,最後一個表示式的值,就是整個逗號表示式的值

int x=(m-=n,m+n,++m,m+5,n++,m-n);

強轉運算子:(型別)

//強轉運算子

x=(int)3.4+6.6;

相關文章