C語言運算符是說明特定操作的符號,它是構造C語言表達式的工具 。C語言的運算是非常豐富的,除了控制語句和輸入輸出以外的幾乎所有的基本操作都作為運算符處理。常見的運算符有三大類:算術運算符、關系運算符與邏輯運算符,另外,還有一些用于完成特殊任務的運算符,比如位運算、賦值運算符等等。
數據運算規則:
- 計算機是以二進制存儲數據的,以數據的補碼存儲,原碼作為輸出的;
- 計算機只進行相同類型數據的計算;
- 若數據類型不相同,計算機內部將進行一個隱式轉換:由低精度轉換為高精度的數據,即char--》int--》float--》--》double。
1 算術運算符
算術運算符是指:+、—、*、/、%(求余)、++(自增)、--(自減)七種。
注意: %:左右兩邊的數據類型必須是整數類型。
自增(++)和自減(--)都有前綴和后綴之分:
- ++i表示i自增1后,再參與其它運算;
- i++表示i先參與運算,再自行加1;
- --i表示i自減1后,再參與運算;
- i--表示i先參與運算,再自行減1。
案例1:
#include <stdio.h>
int main()
{
int a=7;
int b=a++;
printf ("a=%d\tb=%d\n",a,b); // \t:表示中間相隔一個Tab鍵。
return 0;
}
2 位運算符
在位運算中,是以輸入整形變量的二進制(32位)進行運算的,其中有原碼、反碼和補碼。
原碼:整型變量本身的二進制數;
反碼:正整數的反碼和原碼是相同的,而負數的反碼是原碼的最高為符號不變,后面的依次取反,0變為1,1變為0;
補碼:正整數的補碼與原碼、反碼相同,而負數的補碼是在反碼的基礎上加1。
注意:由于計算機存儲整型變量是4個字節,32位,若算出來的是33位,則放棄最高位。
-1
原碼:1000 0000 0000 0000 0000 0000 0000 0001
反碼:1111 1111 1111 1111 1111 1111 1111 1110
補碼:1111 1111 1111 1111 1111 1111 1111 1111
位運算符:|、&、~、^、<<、>>六種
- |:表示有1就為1;
- &:表示有零就為0;
- ~:按位取反;
- ^:表示異或,只要不同就為1;
- <<m:左移m位,右邊以零補全;
m:右移m位,左邊以符號位補全。
案例2:
#include<stdio.h>
int main()
{
int a=7;
int b=8;
printf ("%d%d%d\n",a|b,a&b;~a);
return 0;
}
/*7的原碼:
0000 0000 0000 0000 0000 0000 0000 0111
8的原碼:
0000 0000 0000 0000 0000 0000 0000 1000
a|b:0000 0000 0000 0000 0000 0000 1111
a&b:0000 0000 0000 0000 0000 0000 0000
~a: 補碼:1111 1111 1111 1111 1111 1111 1000
原碼:1111 1111 1111 1111 1111 1111 0111
原碼:1000 0000 0000 0000 0000 0000 1000
注意:
- 有符號時,char:-128~127;
- 無符號時,unsigned char:0~255;
- 位運算等級比較低,在參與運算時需要加小括號()。
3 賦值運算符
賦值運算符有:=、+=、-=、/=、*=、%=、&=、|=、^=、>>=、<<=十一種。
- 簡單賦值運算符“=”
由“=”連接起來的式子成為賦值表達式,其一般形式為:
變量=表達式;
案例3:x=a+b; w=i++
- 類型轉換
如果運算符兩邊數據類型不相同,系統將自動進行類型轉換,即把賦值號右邊的類型轉換為左邊的類型,如下:
- 實型賦予整型,舍去小數部分。
- 整型賦予實型,數值不變,但將以浮點形式存在,即增加小數部分(小數部分的值為零)。
- 字符型賦予整型,由于字符串為一個字節,而整型為兩個字節,故將字符的ASCII碼值放到整型量的低八位,高八位為零。整型賦予字符型,只把低八位賦予字符量。
4 邏輯運算符
邏輯運算符:&&、||、!三種。
&&:并且,事件一&&事件二,兩個事件都成立時,整個事件才成立;
||:或,事件一||事件二,兩個事件有一個事件成立,整個事件就成立;
!:非,事件不成立,為真。
注意:
- 事件一&&事件二,當事件一不成立時,就沒有必要執行事件二,并判斷是否成立,因為邏輯結果都為零;
2.事件一||事件二,當事件一成立時,就沒有必要判斷事件二是否成立,因為邏輯結果都為1。
案例4:
#include <stdio.h>
int main ()
{
int a=5;
int b=7;
int c=10;
int result=a<b||c++;
printf("result=%d\nc=%d\n",result,c);
return 0;
}
5 關系運算符
關系運算符:<、<=、>、>=、==、!=共六種。
關系運算符所得的結果是一個邏輯值,在計算機中邏輯值分別為0和1,若果這個事實的邏輯是真的,那么邏輯結果為1,反之則為0。
6 三目運算符
條件?語句1:語句2
功能分析:如果條件成立,就執行語句1,否則執行語句2。
案例5:比較兩個數的大小,輸出最大值。
#include <stdio.h>
int main()
{
int a,b,max;
printf ("input two number:\n");
scanf ("%d%d",&a,&b);
max=a>b?a:b;
printf("max=%d\n",max);
return 0;
}
還有一些其他的運算符,比如逗號運算符,括號運算符等等,都是相對簡單的,自己看一下都是可以理解,并且能做的,因此在這里也不一一進行解釋說明了。