最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言運算符與表達式

 更新時間:2022年07月06日 10:10:47   作者:王小王_123???????  
這篇文章主要介紹了C語言運算符與表達式,表達式是C語言的主體。在C語言中,表達式由操作符和操作數(shù)組成,更多相關(guān)介紹需要的小伙伴可以參考下面文章內(nèi)容

表達式

函 數(shù) 概 述

表達式是C語言的主體。在C語言中,表達式由操作符和操作數(shù)組成。最簡單的表達式可以只含有一個操作數(shù)。根據(jù)表達式含有的操作符的個數(shù),可以把表達式分為簡單表達式和復雜表達式兩種:簡單表達式是只含有一個操作符的表達式,而復雜表達式是包含兩個或兩個以上操作符的表達式。

5+5
iNumber+9
iBase+(iPay*iDay)

表達式本身什么事情也不做,只是返回結(jié)果值。在程序不對返回的結(jié)果值進行任何操作的情況下,返回的結(jié)果值不起任何作用,也就是忽略返回的值。

表達式返回的結(jié)果值是有類型的。表達式隱含的數(shù)據(jù)類型取決于組成表達式的變量和常量的類型。

賦值運算符與賦值表達式

變量賦初值

在聲明變量時,可以為其賦一個初值,就是將一個常數(shù)或者一個表達式的結(jié)果賦值給一個變量,變量中保存的內(nèi)容就是這個常量或者賦值語句中表達式的值。這就是為變量賦初值。

先來看一下為變量賦值為常數(shù)的情況。一般的形式是:

類型 變量名 = 常數(shù);

其中的變量名也稱為變量的標識符。

通過變量賦初值的一般形式,以下是相關(guān)的代碼實例:

char cChar ='A';
int iFirst=100;
float fPlace=1450.78f;

賦值表達式為變量賦初值。

賦值語句把一個表達式的結(jié)果值賦給一個變量。一般的形式是:

類型 變量名 = 表達式;

可以看到,其一般形式與常數(shù)賦值的一般形式是相似的,例如:

int iAmount= 1+2;
float fPrice= fBase+Day*3;

在上面的舉例中,得到賦值的變量iAmount和fPrice稱為左值,因為它出現(xiàn)的位置在賦值語句的左側(cè)。產(chǎn)生值的表達式稱為右值,因為它出現(xiàn)的位置在表達式的右側(cè)。

【實例】 為變量賦初值。為變量賦初值的操作是編程時常見的操作。在本實例中,模擬鐘點工的計費情況,使用賦值語句和表達式得出鐘點工工作8個小時后所得的薪水。

#include<stdio.h>
int main()
{
int iHoursWorded=8;/*定義變量,為變量賦初值。表示工作時間*/
int iHourlyRate; /*聲明變量,表示一個小時的薪水*/
int iGrossPay; /*聲明變量,表示得到的工資*/
iHourlyRate=13; /*為變量賦值*/
iGrossPay=iHoursWorded*iHourlyRate; /*將表達式的結(jié)果賦值給變量*/
printf("The HoursWorded is: %d\n",iHoursWorded); /*顯示工作時間變量*/
printf("The HourlyRate is: %d\n",iHourlyRate);/*顯示一個小時的薪水*/
printf("The GrossPay is: %d\n",iGrossPay);/*顯示工作所得的工資*/
return 0; /*程序結(jié)束*/
}

自動類型轉(zhuǎn)換

數(shù)值類型有很多種,如字符型、整型、長整型和實型等,因為這些類型的變量、長度和符號特性都不同,所以取值范圍也不同?;旌鲜褂眠@些類型時會出現(xiàn)什么情況呢?第3章已經(jīng)對此有所介紹。

C語言中使用一些特定的轉(zhuǎn)化規(guī)則。根據(jù)這些轉(zhuǎn)化規(guī)則,數(shù)值類型變量可以混合使用。如果把比較短的數(shù)值類型變量的值賦給比較長的數(shù)值類型變量,那么比較短的數(shù)值類型變量中的值會升級表示為比較長的數(shù)值類型,數(shù)據(jù)信息不會丟失。但是,如果把較長的數(shù)值類型變量的值賦給比較短的數(shù)值類型變量,那么數(shù)據(jù)就會降低級別表示,并且當數(shù)據(jù)大小超過比較短的數(shù)值類型的可表示范圍時,就會發(fā)生數(shù)據(jù)截斷。

有些編譯器遇到這種情況時就會發(fā)出警告信息,例如:

float i=10.1f;
int j=i;

此時編譯器會發(fā)出警告,如圖所示:

強制類型轉(zhuǎn)換

通過自動類型轉(zhuǎn)化的介紹得知,如果數(shù)據(jù)類型不同,就可以根據(jù)不同情況自動進行類型轉(zhuǎn)化,但此時編譯器會提示警告信息。這個時候如果使用強制類型轉(zhuǎn)化告知編譯器,就不會出現(xiàn)警告。

強制類型轉(zhuǎn)化的一般形式為:

(類型名) (表達式)

例如在上述不同變量類型轉(zhuǎn)化時使用強制類型轉(zhuǎn)化的方法:

float i=10.1f;
int j= (int)i; /*進行強制類型轉(zhuǎn)化*/

在代碼中可以看到在變量前使用包含要轉(zhuǎn)化類型的括號,這樣就對變量進行了強制類型轉(zhuǎn)化。

【實例】 顯示類型轉(zhuǎn)化的結(jié)果。在本實例中,通過不同類型變量之間的賦值,將賦值操作后的結(jié)果進行輸出,觀察類型轉(zhuǎn)化后的結(jié)果。

#include<stdio.h>
int main()
{
char cChar; /*字符型變量*/
short int iShort; /*短整型變量*/
int iInt; /*整型變量*/
float fFloat=70000; /*單精度浮點型*/
cChar=(char)fFloat; /*強制轉(zhuǎn)化賦值*/
iShort=(short)fFloat;
iInt=(int)fFloat;
printf("the char is: %c\n",cChar);/*輸出字符變量值*/
printf("the long is: %ld\n",iShort);/*輸出短整型變量值*/
printf("the int is: %d\n",iInt); /*輸出整型變量值*/
printf("the float is: %f\n",fFloat);/*輸出單精度浮點型變量值*/
return 0; /*程序結(jié)束*/
}

算數(shù)運算符與表達式

算術(shù)運算符

算術(shù)運算符包括:兩個單目運算符(正和負),5個雙目運算符乘法、除法、取模、加法和減法。具體符號和對應的功能如表所示。

在上述的算術(shù)運算符中,取模運算符(%)用于計算兩個整數(shù)相除得到的余數(shù),并且取模運算符的兩側(cè)均為整數(shù),例如7%4的結(jié)果是3。

算術(shù)表達式

在表達式中使用算術(shù)運算符,則將表達式稱為算術(shù)表達式。下面是一些算術(shù)表達式的例子,其中使用的運算符就是表4.1中所列出的算術(shù)運算符:

Number=(3+5)/Rate;
Height= Top-Bottom+1;
Area=Height * Width;

需要說明的是,兩個整數(shù)相除的結(jié)果為整數(shù),例如7/4的結(jié)果為1,舍去的是小數(shù)部分。但是,如果其中的一個數(shù)是負數(shù)時會出現(xiàn)什么情況呢?此時機器會采取“向零取整”的方法,即為-1,取整后向0靠攏。

優(yōu)先級與結(jié)合性

C語言中規(guī)定了各種運算符的優(yōu)先級和結(jié)合性,首先來看一下有關(guān)算術(shù)運算的優(yōu)先級:

算術(shù)運算符的優(yōu)先級

在表達式求值時,先按照運算符的優(yōu)先級別高低次序執(zhí)行,算術(shù)運算符中*、/、%的優(yōu)先級別高于+、-的級別。例如,如果在表達式中同時出現(xiàn)*和+,那么先運算乘法:

R=x+y*z;

在表達式中,因為*比+的優(yōu)先級高,所以會先進行y*z的運算,最后加上x。

算術(shù)運算符的結(jié)合性

當算術(shù)運算符的優(yōu)先級相同時,結(jié)合方向為“自左向右”。

例如:

a-b+c

因為減法和加法的優(yōu)先級是相同的,所以b先與減號相結(jié)合,執(zhí)行a-b的操作,然后執(zhí)行加c的操作。這樣的操作過程就稱為“自左向右的結(jié)合性”,在后面的介紹中還可以看到“自右向左的結(jié)合性”。

自增自減運算符

在C語言中還有兩個特殊的運算符:自增運算符“++”和自減運算符“--”。自增運算符和自減運算符對變量的操作分別是增加1和減少1,

如表所示:

自增運算符和自減運算符可以放在變量的前面或者后面,放在變量前面稱為前綴,放在后面稱為后綴,使用的一般方法如下所示。

--Counter; /*自減前綴符號*/
Grade--; /*自減后綴符號*/
++Age; /*自增前綴符號*/
Height++; /*自增后綴符號*/

在上面這些例子中,運算符的前后位置不重要,因為所得到的結(jié)果是一樣的,自減就是減1,自增就是加1。

關(guān)系運算符與表達式

關(guān)系運算符包括大于運算符、大于等于運算符、小于運算符、小于等于運算符、等于運算符、不等于運算符。表中列出了這6種關(guān)系運算符所對應的符號。

關(guān)系運算符用于對兩個表達式的值進行比較,返回一個真值或者假值。返回真值還是假值取決于表達式中的值和所用的運算符。其中真值為1,假值為0,真值表示指定的關(guān)系成立,假值則表示指定的關(guān)系不正確。

例如:

7>5 /*因為7大于5,所以該關(guān)系成立,表達式的結(jié)果為真值*/
7>=5 /*因為7大于5,所以該關(guān)系成立,表達式的結(jié)果為真值*/
7<5 /*因為7大于5,所以該關(guān)系不成立,表達式的結(jié)果為假值*/
7<=5 /*因為7大于5,所以該關(guān)系不成立,表達式的結(jié)果為假值*/
7==5 /*因為7不等于5,所以該關(guān)系不成立,表達式的結(jié)果為假值*/
7!=5 /*因為7不等于5,所以該關(guān)系成立,表達式的結(jié)果為真值*/

關(guān)系運算符通常用來構(gòu)造條件表達式,用在程序流程控制語句中,例如if語句是用于判斷條件而執(zhí)行語句塊,在其中使用關(guān)系表達式作為判斷條件,如果關(guān)系表達式返回的是真值則執(zhí)行下面的語句塊,如果為假值就不去執(zhí)行。

代碼如下:

if(Count<10)
{
… /*判斷條件為真值,執(zhí)行代碼*/
}

其中,if(iCount<10)就是判斷iCount小于10這個關(guān)系是否成立,如果成立則為真,如果不成立則為假。

優(yōu)先級與結(jié)合性

關(guān)系運算符的結(jié)合性都是自左向右的。使用關(guān)系運算符的時候常常會判斷兩個表達式的關(guān)系,但是由于運算符存在著優(yōu)先級的問題,因此如果不小心處理則會出現(xiàn)錯誤。例如要進行這樣的判斷操作:先對一個變量進行賦值,然后判斷這個賦值的變量是否不等于一個常數(shù),

代碼如下:

if(Number=NewNum!=10)
{
…
}

因為“!=”運算符比“=”的優(yōu)先級要高,所以NewNum!=0的判斷操作會在賦值之前實現(xiàn),變量Number得到的就是關(guān)系表達式的真值或者假值,這樣并不會按照之前的意愿執(zhí)行。

前文曾經(jīng)介紹過括號運算符,括號運算符的優(yōu)先級具有最高性,因此使用括號來表示要優(yōu)先計算的表達式,例如:

if((Number=NewNum)!=10)
{
…
}

這種寫法比較清楚,不會產(chǎn)生混淆,沒有人會對代碼的含義產(chǎn)生誤解。由于這種寫法格式比較精確簡潔,因此被多數(shù)的程序員所接受。

邏輯運算符與表達式

使用邏輯運算符可以將多個關(guān)系表達式的結(jié)果合并在一起進行判斷。

其一般形式為:

表達式  邏輯運算符  表達式

例如使用邏輯運算符:

Result= Func1&&Func2; /*Func1和Func2都為真時,結(jié)果為真*/
Result= Func1||Func2; /*Func1、Func2其中一個為真時,結(jié)果為真*/
Result= !Func2; /*如果Func2為真,則Result為假*/

前面已經(jīng)介紹過,但這里還要做重點強調(diào),不要把邏輯與運算符“&&”和邏輯或運算符“||”與下面要講的位與運算符“&”和位或運算符“|”混淆。

邏輯與運算符和邏輯或運算符可以用于相當復雜的表達式中。一般來說,這些運算符用來構(gòu)造條件表達式,用在控制程序的流程語句中,例如在后面章節(jié)中要介紹的if、for、while語句等。

在程序中,通常使用單目邏輯非運算符“!”把一個變量的數(shù)值轉(zhuǎn)化為相應的邏輯真值或者假值,也就是1或0。

例如:

Result= !!Value;  /*轉(zhuǎn)化成邏輯值*/

&&||是雙目運算符,它們要求有兩個操作數(shù),結(jié)合方向自左至右;!是單目運算符,要求有一個操作數(shù),結(jié)合方向自左向右。

邏輯運算符的優(yōu)先級從高到低依次為:單目邏輯非運算符!,邏輯與運算符&&,邏輯或運算符||。

【實例4.8】 邏輯運算符的應用。在本實例中,使用邏輯運算符構(gòu)造表達式,通過輸出顯示表達式的結(jié)果,根據(jù)結(jié)果分析表達式中邏輯運算符的計算過程。

#include<stdio.h>
int main()
{
int iNumber1,iNumber2; /*聲明變量*/
iNumber1=10; /*為變量賦值*/
iNumber2=0;
printf("the 1 is Ture , 0 is False\n"); /*顯示提示信息*/

printf("5< iNumber1&&iNumber2 is %d\n",5<iNumber1&&iNumber2); /*顯示邏輯與表達式的結(jié)果*/

printf("5< iNumber1||iNumber2 is %d\n",5<iNumber1||iNumber2); /*顯示邏輯或表達式的結(jié)果*/

iNumber2=!!iNumber1;/*得到iNumber1的邏輯值*/
printf("iNumber2 is %d\n",iNumber2);/*輸出邏輯值*/
return 0;
}

位邏輯運算符與表達式

位邏輯運算符

位邏輯運算符包括:位邏輯與、位邏輯或、位邏輯非、取補。表列出了所有位邏輯運算符。

位邏輯表達式

在程序中,位邏輯運算符一般被程序員用作開關(guān)標志。較低層次的硬件設(shè)備驅(qū)動程序,經(jīng)常需要對輸入輸出設(shè)備進行位操作。

如下位邏輯與運算符的典型應用,對某個語句的位設(shè)置進行檢查:

if(Field & BITMASK)

語句的含義是if語句對后面括號中的表達式進行檢測。如果表達式返回的是真值,則執(zhí)行下面的語句塊,否則跳過該語句塊不執(zhí)行。其中運算符用來對BITMASK變量的位進行檢測,判斷其是否與Field變量的位有相吻合之處。

逗號運算符與表達式

在C語言中,可以用逗號將多個表達式分隔開來。其中,用逗號分隔的表達式被分別計算,并且整個表達式的值是最后一個表達式的值。

逗號表達式稱為順序求值運算符。逗號表達式的一般形式為:

表達式1,表達式2 ,…,表達式n

逗號表達式的求解過程是:先求解表達式1,再求解表達式2,一直求解到表達式n。整個逗號表達式的值是表達式n的值。

觀察下面使用逗號運算符的代碼:

Value=2+5,1+2,5+7;

上面語句中Value所得到的值為7,而非12。整個逗號表達式的值不應該是最后一個表達式的值嗎?為什么不等于12呢?答案在于優(yōu)先級的問題,由于賦值運算符的優(yōu)先級比逗號運算符的優(yōu)先級高,因此先執(zhí)行的賦值運算。如果要先執(zhí)行逗號運算,則可以使用括號運算符,代碼如下所示:

Value=(2+5,1+2,5+7);

使用括號之后,Value的值為12。

【實例4】 用逗號分隔的表達式。本實例中,通過逗號運算符將其他的運算符結(jié)合在一起形成表達式,再將表達式的最終結(jié)果賦值給變量。由顯示變量的值,分析逗號運算符的計算過程。

#include<stdio.h>
int main()
{
int iValue1,iValue2,iValue3,iResult; /*聲明變量,使用逗號運算符*/
/*為變量賦值*/
iValue1=10;
iValue2=43;
iValue3=26;
iResult=0;
iResult=iValue1++,--iValue2,iValue3+4;/*計算逗號表達式*/
printf("the result is :%d\n",iResult); /*將結(jié)果輸出顯示*/
iResult=(iValue1++,--iValue2,iValue3+4);/*計算逗號表達式*/
printf("the result is :%d\n",iResult); /*將結(jié)果輸出顯示*/
return 0; /*程序結(jié)束*/
}

復合賦值運算符

復合賦值運算符是C語言中獨有的,實際這種操作是一種縮寫形式,可使得變量操作的描述方式更為簡潔。例如在程序中為一個變量賦值:

Value=Value+3;

這個語句是對一個變量進行賦值操作,值為這個變量本身與一個整數(shù)常量3相加的結(jié)果值。使用復合賦值運算符可以實現(xiàn)同樣的操作。例如上面的語句可以改寫成:

Value+=3;

這種描述更為簡潔。關(guān)于上面兩種實現(xiàn)相同操作的語句,賦值運算符和復合賦值運算符的區(qū)別在于:

為了簡化程序,使程序精煉。 為了提高編譯效率。

對于簡單賦值運算符,如Func=Func+1中,表達式Func計算兩次;對于復合賦值運算符,如Func+=1中,表達式Func僅計算一次。一般來說,這種區(qū)別對于程序的運行沒有太大的影響。但是,如果表達式中存在某個函數(shù)的返回值,那么函數(shù)被調(diào)用兩次。

【實例】 使用復合賦值運算符簡化賦值運算。

#include<stdio.h>
int main()
{
int iTotal,iValue,iDetail; /*聲明變量*/
iTotal=100; /*為變量賦值*/
iValue=50;
iDetail=5;
iValue*=iDetail; /*計算得到iValue變量值*/
iTotal+=iValue; /*計算得到iTotal變量值*/
printf("Value is: %d\n",iValue); /*顯示計算結(jié)果*/
printf("Total is: %d\n",iTotal);
return 0;
}

到此這篇關(guān)于C語言運算符與表達式的文章就介紹到這了,更多相關(guān)C運算符與表達式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于C++虛函數(shù)與靜態(tài)、動態(tài)綁定的問題

    關(guān)于C++虛函數(shù)與靜態(tài)、動態(tài)綁定的問題

    這篇文章主要介紹了C++虛函數(shù)與靜態(tài)、動態(tài)綁定,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • 分享常用的3個C++小技巧

    分享常用的3個C++小技巧

    這篇文章主要分享了常用的3個C++小技巧,
    2021-12-12
  • C++線程安全容器stack和queue的使用詳細介紹

    C++線程安全容器stack和queue的使用詳細介紹

    stack是一種容器適配器,專門用在具有后進先出操作的上下文環(huán)境中,其刪除只能從容器的一端進行 元素的插入與提取操作;隊列是一種容器適配器,專門用于在FIFO上下文(先進先出)中操作,其中從容器一端插入元素,另一端提取元素
    2022-08-08
  • opencv提取外部輪廓并在外部加矩形框

    opencv提取外部輪廓并在外部加矩形框

    這篇文章主要為大家詳細介紹了opencv提取外部輪廓并在外部加矩形框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • C 語言關(guān)于聯(lián)合體的相關(guān)知識

    C 語言關(guān)于聯(lián)合體的相關(guān)知識

    這篇文章主要介紹了C 語言關(guān)于聯(lián)合體的相關(guān)知識,文中講解非常細致,代碼幫助大家更好的理解學習,感興趣的朋友可以了解下
    2020-06-06
  • C語言的堆串操作詳解

    C語言的堆串操作詳解

    大家好,本篇文章主要講的是C語言的堆串操作詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • C++條件語句和條件運算符的使用方法講解

    C++條件語句和條件運算符的使用方法講解

    這篇文章主要介紹了C++條件語句和條件運算符的使用方法講解,是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • Conan中的C/C++的依賴管理

    Conan中的C/C++的依賴管理

    C/C++與Java、Python都有庫依賴問題,但是C/C++語言沒有自帶的包管理機制,也許是因為C/C++更多的應用于系統(tǒng)程序領(lǐng)域,Java、Python更多用于應用程序領(lǐng)域,對快速開發(fā)和部署要求更高,今天通過本文給大家介紹Conan中的C/C++的依賴管理,感興趣的朋友一起看看吧
    2023-01-01
  • C++11新特性std::tuple的使用方法

    C++11新特性std::tuple的使用方法

    這篇文章主要介紹了C++11新特性-std::tuple的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Qt中PaintEvent繪制實時波形圖的實現(xiàn)示例

    Qt中PaintEvent繪制實時波形圖的實現(xiàn)示例

    本文主要介紹了Qt中PaintEvent繪制實時波形圖的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06

最新評論

基隆市| 南郑县| 镇赉县| 岑溪市| 禹城市| 上栗县| 平陆县| 治多县| 获嘉县| 竹溪县| 海南省| 焦作市| 翁牛特旗| 延寿县| 呼图壁县| 宜兰市| 永川市| 汨罗市| 康保县| 望城县| 青海省| 荣昌县| 石景山区| 延长县| 凤城市| 丹棱县| 甘孜| 开阳县| 车险| 临江市| 华安县| 宾川县| 库尔勒市| 卫辉市| 贵港市| 满洲里市| 广安市| 永川市| 灵山县| 永城市| 昌宁县|