引言:
hello,大家好!我是心跳sy,今天給大家分享c語言運算符詳解,我們知道,c語言的一個顯著特點就是表達式的應用,表達式是表示如何計算值的公式,而運算符又是構建表達式的基本工具,c語言擁有非常豐富的運算符,包括算術運算符、關系運算符、邏輯運算符、賦值運算符、位操作運算符、自增自減運算符、條件運算符、逗號運算符、指針運算符、求字節(jié)數(shù)運算符、強制類型轉(zhuǎn)換運算符和特殊運算符。本文對每個運算符都進行了非常詳細的解釋,我們一起來看看吧~??!
1、算術運算符(包括+,-,*,/,%)
·1. 算術運算符是包括c語言在內(nèi)的多種編程語言中廣泛應用的一種運算符,這類運算符可以執(zhí)行加法、減法、乘法、除法以及求余。
·2. 加法類和乘法類運算符都屬于二元運算符,需要兩個操作數(shù),一元運算符只需要一個操作數(shù):i=+1; i=-1; (通常+什么都不做)
*3.需要注意的是除了%運算符外,其他二元算術運算符既允許操作數(shù)是整數(shù),也允許操作數(shù)是浮點數(shù),兩者混合也是可以的。取余運算符%要求操作數(shù)是整數(shù),如果兩個數(shù)有一個不是整數(shù),編譯無法通過。
*4.運算符‘/’當兩個操作數(shù)都是整數(shù)時,運算符‘/’會丟掉分數(shù)部分來截取結果。因此1/2的結果是0而不是0.5。
//當int型操作數(shù)和float型操作數(shù)混合在一起時,運算結果是float型的
int a = 7;
float b = 3.5;
printf("%f\n", a + b);
printf("%f\n", a/b);
2、關系運算符(包括>,<,==,>=,<=,!=)
·1. c語言表達式產(chǎn)生的結果是0(假)或1(真),例如3<5表達式的值為1,而3>5的值為0;關系運算符同樣適用于比較浮點數(shù),也允許比較混合型操作數(shù),如:1<2.5的值為1;
·2. 關系運算符的優(yōu)先級低于算術運算符,例如:表達式 i+j<k-1的意思是(i+j)<(k-1).關系運算符是左結合性的。
*3.注意:i<j<k在c語言中是合法的,但該表達式不是測試j是否位于i和k之間(正確表達式:i<j&&j<k),因為<運算符是左結合的,所以表達式等價于(i<j)<k,換句話說是先檢測i是否小于j,然后用比較產(chǎn)生的結果(1或0)來和k進行比較。
*4.注意:“等于”是兩個緊鄰的=,而不是一個=,值得注意的是,==和!=運算符的優(yōu)先級低于大于小于等關系運算符。
3、邏輯運算符(!,&&,||)
·1. !,&&,||分別是邏輯非、邏輯與、邏輯或(其中 !是一元運算符,&&、||是二元運算符)邏輯運算符產(chǎn)生的結果是0或1,將任何非零值操作數(shù)作為真值來處理,將任何零值作為假值來處理規(guī)則如下:
·2.如果表達式的值為0,那么!表達式 的結果為1;
·3.如果 表達式1和表達式2 的值都是非零值,那么 表達式1&&表達式2 的結果為1;
·4.如果 表達式1或表達式2 的值中任意一個是(或者都是)非零值,那么 表達式1||表達式2 的結果為1。
*5.運算符&&和||都對操作數(shù)進行“短路”計算,先計算出左值,再計算右值,如果表達式的值可以僅由左操作數(shù)的值推導出來,則不用計算右值;例如:(i != 0)&& (i/j> 0),如果i不等于零,則計算右值,如果i等于零,就不需要計算了
*6.運算符!是右結合的,&&和||為左結合的。
4、賦值運算符(=,+=,-=,*=,/=,%=,&=,|=,^=,>>=,<<=)
·1.表達式 a=b(b可以是常量、變量或更復雜的表達式);如果a和b的類型不同,那么賦值運算發(fā)生時會把b的值轉(zhuǎn)換為a的類型。
例如:int i = 0;
i = 6.66f //此時 i 為6。
·2.賦值運算符可以多個賦值進行串聯(lián),例如:i = j = k = 0;
·3.運算符 = 是右結合的,因此上述表達式等價于i =(j =(k = 0));
·4.賦值運算符要求它的左操作數(shù)為左值,左值表示對象,而不是常量或計算的結果,變量是左值,而10或 2*i 這樣的表達式不是左值。
·5.復合賦值:i += 2;等價于i = i + 2;
5、位操作運算符(<<,>>,~,&,^,|)
·1.移位運算符包括左移位(<<)和右移位(>>),它可以將整數(shù)的二進制位進行左移右移,它們的操作數(shù)可以是任意整數(shù)類型(包括char),移位運算符對兩個操作數(shù)都會進行整數(shù)提升,返回值類型是左操作數(shù)提升后的類型。
·2.i << j的值是將 i 中的二進制位左移j位后的結果,每次從 i 的最左端溢出一位,在 i 的最右端補一個0位;i >> j的值是將 i 中的二進制位右移 j 位后的結果。
·3.需要注意的是右移操作符分為算術右移和邏輯右移兩種,算術右移:右邊舍去,左邊補原符號位,原符號位為0就補0,為1就補1;邏輯右移:右邊舍去,左邊直接補0.
·4.移位操作符優(yōu)先級比算術運算符優(yōu)先級低,i << 2+1等價于i <<(2+1)
·5.~,&,^,|分別為按位取反、按位與、按位異或、按位或。其中 ~是一元運算符,其他為二元運算符, ~是對操作數(shù)每一位取反,即將每一個1替換為0,將0替換為1;&對兩個操作數(shù)相應的位執(zhí)行邏輯與運算,運算符^和|相似(都是對兩個操作數(shù)執(zhí)行邏輯或運算),不同的是,當兩個操作數(shù)的為都是1時, ^產(chǎn)生0而|產(chǎn)生1。
6、自增自減運算符(++,- -)
·“自增”(加1)“自減”(減1),++,- -運算符既可以作為前綴(++i,- -i),也可以作為后綴(i++,i- -),前綴是在使用之前就自增1,后綴是先使用完后增1
int i = 1;
printf("i is %d\n", ++i);
printf("i is %d\n", i);
int j = 1;
printf("j is %d\n", j++);
printf("j is %d\n", j);
7、條件運算符( ?:)
· 條件表達式:表達式1?表達式2:表達式3,它是c語言運算符唯一一個三目運算符。這個表達式可以解釋為:如果表達式1成立,那么執(zhí)行表達式2,否則執(zhí)行表達式3。
*注意:除賦值運算符以外,條件運算符的優(yōu)先級低于其他所有運算符。
8、逗號運算符( ,,)
·1.逗號表達式:表達式1,表達式2,逗號表達式的值要通過兩步實現(xiàn),第一步,計算表達式1的值,第二步,計算表達式2的值,把這個值作為整個表達式的值。
·2. 需要注意的是,表達式1的值并不是完全拋棄,如果表達式1的結果對表達式2有影響,那么其值仍然起作用,只是最終值為表達式2的值。
9、指針運算符(&,*)
·1.如果要找到變量的地址,可以使用 &(取地址運算符),如果x是變量,那么&x就是x在內(nèi)存中的地址。為了獲得對指針所指向?qū)ο蟮脑L問,可以使用 *(間接尋址運算符),如果p是指針,*p則表示p當前指向的對象。
·2.在初始化指針變量時,使用&運算符把某個變量的地址賦給它。例如:
int i,j, * p;//方法一
p = &i;
int* pa = &j;//方法二
· 而一旦指針變量指向了對象,就可以使用*運算符訪問存儲在對象中的內(nèi)容。例如,如果p指向 i,那么可以顯示出 i 的值,例如:
printf("%d\n", *p);
10、求字節(jié)數(shù)運算符(sizeof運算符)
·1.sizeof 表達式:sizeof(類型名),sizeof 運算符允許程序獲取儲存指定類型的值所需要的空間,其值是一個無符號整數(shù),代表存儲屬于 類型名 的值所需要的字節(jié)數(shù)。表達式sizeof(char)的值為1,編譯器本身通常就能夠確定 sizeof 表達式的值。
·2.顯示 sizeof 值時要注意,sizeof 表達式的類型為 size_t,size_t一定是無符號整形,C99中 printf 可以直接顯示出 size_t 的類型值而不需要強制轉(zhuǎn)換。
printf("Size of int:%zd", sizeof(int));//輸出:Size of int:4
11、強制類型轉(zhuǎn)換運算符((類型名))
· c語言把(類型名)視為一元運算符,一元運算符的優(yōu)先級高于二元運算符,(unsigned int)time(NULL),(unsigned int)即為強制類型轉(zhuǎn)換。
12、特殊運算符([ ],——>,. ,())
·1.[ ]是數(shù)組下標索引運算符,可以獲取數(shù)組中單獨的元素,下表運算符需要兩個操作數(shù),一個操作數(shù)是數(shù)組名稱,另一個是一個整數(shù)。
·2.——>運算符和 . 運算符在結構體訪問成員變量時經(jīng)常用到。當Print函數(shù)中傳入對象b的地址,print函數(shù)實現(xiàn)時用結構體指針接收,打印時用——>指向成員變量。當不傳入地址時,也可以直接用成員訪問操作符 . 來訪問。
·3.函數(shù)名(形參表),它最少需要1個操作數(shù),函數(shù)名稱,參數(shù)列表可以根據(jù)用戶需求進行設置。文章來源:http://www.zghlxwxcb.cn/news/detail-659825.html
struct Student
{
char name[20];
int age;
};
void Print(struct Student* pb)
{
printf("%s %d\n", pb->name, pb->age);
}
int main()
{
struct Student b = {"小明", 20};
printf("%s %d\n", b.name, b.age);
Print(&b);
return 0;
}
13、附:操作符優(yōu)先級表
感謝各位友友們閱讀,歡迎各位大佬在評論區(qū)留言哦~?。。?br>文章來源地址http://www.zghlxwxcb.cn/news/detail-659825.html
到了這里,關于運算符詳解(c語言)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!