gogo专业大尺度亚洲高清人体,美女张开双腿让男生桶,亚洲av无码一区二区三区鸳鸯影院,久久久久国产精品人妻

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > C語(yǔ)言運(yùn)算符

C語(yǔ)言運(yùn)算符 時(shí)間:2019-03-15      來(lái)源:華清遠(yuǎn)見(jiàn)

一、前言

在嵌入式開(kāi)發(fā)中,我們一般選用C語(yǔ)言作為開(kāi)發(fā)語(yǔ)言。一個(gè)主要的原因在于C語(yǔ)言提供了大量的運(yùn)算符,比如我們對(duì)硬件的操作一般涉及到對(duì)位的操作,而C語(yǔ)言就提供了這樣的運(yùn)算符,這是其他語(yǔ)言不具備的。

二、C語(yǔ)言運(yùn)算符有哪些

C語(yǔ)言有大量的運(yùn)算符,可大致分為以下幾類:括號(hào)與結(jié)構(gòu)體符號(hào)、單目、算術(shù)、移位、關(guān)系、位、邏輯、三目、賦值、逗號(hào)。

括號(hào)與結(jié)構(gòu)體符號(hào):括號(hào)包括()、[],結(jié)構(gòu)體符號(hào)指的是結(jié)構(gòu)體成員引用時(shí)的符號(hào)“->”、“.”,他們也是運(yùn)算符,并且優(yōu)先級(jí)與括號(hào)相當(dāng),這也是我們把兩者放在一起討論的原因。至于如何使用則是結(jié)構(gòu)體的內(nèi)容。

單目運(yùn)算符:?jiǎn)文窟\(yùn)算符有很多,例如:!邏輯非、~按位取反、++自增、--自減、+正、-負(fù)、&求地址運(yùn)算符、*間址運(yùn)算符、sizeof()求所占字節(jié)數(shù)、(類型名)強(qiáng)制類型轉(zhuǎn)換。這些運(yùn)算符的運(yùn)算對(duì)象只有一個(gè)。其中&與*屬于指針內(nèi)容,我們不做細(xì)說(shuō)。邏輯非我們?cè)谙旅孢壿嬤\(yùn)算符時(shí)說(shuō)明,按位取反我們?cè)谙旅嫖贿\(yùn)算符時(shí)說(shuō)明,強(qiáng)制類型轉(zhuǎn)換我們?cè)诟袷睫D(zhuǎn)換時(shí)說(shuō)明。Sizeof()首先不是函數(shù),用于求類型的所占字節(jié)數(shù)。例如:int a;sizeof(a)或sizeof(int)得到的值都是4,即整型占4個(gè)字節(jié)。()中可以是變量也可以是數(shù)據(jù)類型也可以是字符串常量。例如:char ch[20]=”hello”;我們定義字符數(shù)組來(lái)保存字符串,當(dāng)我們要求字符串長(zhǎng)度時(shí)我們發(fā)現(xiàn)sizeof(ch)得到的大小為20,即數(shù)組的大小,那么怎么求字符串長(zhǎng)度呢?我們可以用字符串的相關(guān)函數(shù)strlen(),但是也可以sizeof(“hello”);它的結(jié)果為6,即計(jì)算字符串最后的空字符’\0’。++與--是我們經(jīng)常用到的運(yùn)算符,簡(jiǎn)單來(lái)說(shuō),有以下四種情況:

a=10,a++ ++在a的后面,先把a(bǔ)的值賦值給表達(dá)式,a在自加1。即 a=10,b=a,a=a+1

a=10,++a ++在a的前面,a先自加1,再把a(bǔ)的值賦值給表達(dá)式。即 a=10,a=a+1,b=a

a=10,a-- --在a的后面,先把a(bǔ)的值賦值給表達(dá)式,a在自減1。即 a=10,b=a,a=a-1

a=10,--a --在a的前面,a先自減1,再把a(bǔ)的值賦值給表達(dá)式。即 a=10,a=a-1,b=a

上例中a++/++a/a--/--a代表表達(dá)式,我們可以理解為:b=a++/b=++a/b=a--/b=--a

算術(shù)運(yùn)算符:+、-、*、/、%。需要注意的是,在做相乘運(yùn)算時(shí),*不能省略。/表示除號(hào),%表示取余。例:10/3=3 10%3=1 這里%是取10除以3后的余數(shù),所以結(jié)果為1。要注意的是%左右兩邊必須都是整數(shù)。而10/3的結(jié)果為什么是3而不是3.3333呢?這里涉及到格式轉(zhuǎn)換的知識(shí),是我們格式轉(zhuǎn)換部分要說(shuō)的。

移位運(yùn)算符:>> << 。移位運(yùn)算符右移與左移是對(duì)位進(jìn)行操作。例如:a=10,b=a>>1,

此例的意思是把數(shù)值a往右移動(dòng)1位,把結(jié)果賦值給b。我們知道數(shù)據(jù)在內(nèi)存中以二進(jìn)制存放,10對(duì)應(yīng)的二進(jìn)制位1010,各位往右移一位得到0101,最右邊的0被移出去,左邊空的一位我們補(bǔ)0,所以b的值為0101,即5。這是右移,如果數(shù)據(jù)右邊有足夠多的0,我們可以往右移動(dòng)多位,規(guī)律為往右移動(dòng)移位相當(dāng)于除以2,移動(dòng)兩位相當(dāng)于除以2^2,移動(dòng)n位相當(dāng)于除以2^n.左移<<剛好相反,它是把數(shù)據(jù)按位往左移動(dòng),最右邊補(bǔ)0.例如:a=10,b=a<<2;

相當(dāng)于把1010往左移兩位變?yōu)?0 1000,即b的值為40.我們發(fā)現(xiàn)在數(shù)值上相當(dāng)于a*2^2。

所以我們的規(guī)律就是:往右移n位,相當(dāng)于除以2^n 。往左移n位,相當(dāng)于乘以2^n 。實(shí)際上我們就是用左移右移來(lái)代替乘除的,這樣不需要計(jì)算與賦值過(guò)程,只需要將各位移動(dòng),更加快捷。

關(guān)系運(yùn)算符:>大于、<小于、>= 大于或等于、<=小于或等于、==等于、!=不等于。關(guān)系運(yùn)算符用于比較大小,需要注意的是:1、關(guān)系運(yùn)算符的寫(xiě)法。當(dāng)要表示10<a<20時(shí),應(yīng)該寫(xiě)為a>10&&a<20。

&&是邏輯與運(yùn)算符,表示并且。2、關(guān)系運(yùn)算符的值是邏輯值。例如:a=10,b=20; a<b的值為1,既不是a的值也不是b的值。因?yàn)殛P(guān)系運(yùn)算符的值是邏輯值,邏輯值只有兩個(gè)1,0。

如果關(guān)系成立,即邏輯為真,那么值就是1.如果關(guān)系不成立,即邏輯為假,那么值就是0.

邏輯運(yùn)算符:&&邏輯與、||邏輯或、!邏輯非。邏輯運(yùn)算符的值也是邏輯值,需要注意的是對(duì)數(shù)據(jù)來(lái)說(shuō)非0為真,0為假。這三個(gè)運(yùn)算符的關(guān)系為:

邏輯與:兩個(gè)數(shù)據(jù)全為真的時(shí)候結(jié)果才為真

1 1 1

1 0 0

0 1 0

0 0 0

邏輯或:兩個(gè)數(shù)據(jù)有一個(gè)為真結(jié)果就為真

1 1 1

1 0 1

0 1 1

0 0 0

邏輯非:!是單目運(yùn)算符,非真為假,非假為真。!0結(jié)果是1,!-1結(jié)果是0,!1結(jié)果也是0

位運(yùn)算符:按位與&、按位或、按位取反、按位異或^。這些運(yùn)算符也是對(duì)位的操作與邏輯運(yùn)算符要注意區(qū)分。例如:10&20。我們看做:讓各位進(jìn)行相與

01010

& 1 0100

00000

那么10&20的結(jié)果就是0。

與或關(guān)系我們都知道,在補(bǔ)充一下異或關(guān)系,相同為假,不同為真。

1 1 0

1 0 1

0 1 1

0 0 0

我們知道這些都是對(duì)位的操作,我們要額外說(shuō)一下按位取反。例如:int a=1;~a的值為什么呢?我們打印之后發(fā)現(xiàn)結(jié)果為-2。這涉及到數(shù)據(jù)存放的知識(shí)。我們要知道數(shù)據(jù)以補(bǔ)碼形式存放、補(bǔ)碼形式打印。a的二進(jìn)制,0000 0001,是一個(gè)正數(shù),它的補(bǔ)碼為它本身0000 0001,這里我們只以一個(gè)字節(jié)為例。當(dāng)我們~a后按各位取反,得到1111 1110,當(dāng)我們打印這個(gè)數(shù)據(jù)時(shí),需要補(bǔ)碼打印,這時(shí)候它的最高位為1,表示負(fù)數(shù),負(fù)數(shù)的補(bǔ)碼為它的反碼加一。即:

1000 0001+1 = 1000 0010 對(duì)應(yīng)的十進(jìn)制為-2。

三目運(yùn)算符:?:。它是條件語(yǔ)句的內(nèi)容,C語(yǔ)言中只有這一個(gè)三目運(yùn)算符,即運(yùn)算對(duì)象有三個(gè)。例如:a=10,b=20,a>b?a:b的值為b的值。即a大于b為真時(shí)a的值是表達(dá)式的值,否則b的值是表達(dá)式的值。

賦值運(yùn)算符:=、+=、-=、*=、/=、%=、&=、^=、!=、<<=、>>=。即上面的符號(hào)與=相結(jié)合。=叫賦值號(hào),使用時(shí)要注意,例如:int a=10,表示把數(shù)據(jù)10賦值給整型變量a。a+=b表示a=a+b,其他符號(hào)用法相同。

逗號(hào)運(yùn)算符:“,”。例如:a=(b+c,c+d,d+e);a的值為d+e的值,即最后一個(gè)表達(dá)式的值。所以逗號(hào)表達(dá)式的值為最后一個(gè)式子的值。但這并不表示前面的式子沒(méi)用,例如:a=(b++,c+d,b+d);我們要從左向右計(jì)算,因?yàn)閎++改變了b的值,所以要先b++,在b+d。

三、運(yùn)算符優(yōu)先級(jí)

我們?cè)谧龊?jiǎn)單的符合運(yùn)算時(shí),比如:a+b/c+d 我們是先讓b/c,在讓三者進(jìn)行相加。這里/號(hào)比加減運(yùn)算優(yōu)先級(jí)要高。同理,當(dāng)我們的式子包含了以上運(yùn)算符時(shí),我們就要理清先算誰(shuí)再算誰(shuí)。這里我們已經(jīng)將運(yùn)算符的優(yōu)先級(jí)整理為一句話:優(yōu)先級(jí)從高到低依次為:

() 單目算術(shù) 移位 關(guān)系 位 邏輯 三目 賦值 逗號(hào)

四、運(yùn)算符結(jié)合性

這里討論的情況是當(dāng)式子中幾個(gè)運(yùn)算符優(yōu)先級(jí)相同時(shí),應(yīng)該先算誰(shuí)再算誰(shuí)。例如:*p++,我們知道*與++都是單目運(yùn)算符,這時(shí)候先算哪個(gè)呢?我們也給大家總結(jié)了一句話:

單目、三目、賦值運(yùn)算符結(jié)合性自右向左,其他運(yùn)算符結(jié)合性自左向右。

我們給了如下三個(gè)例子:

Int a=10,int *p=&a,求*p++。根據(jù)結(jié)合性自右向左,應(yīng)該先算p++,即p指向a上面的那塊空間。所以*p++表示a上面那塊空間的值。

a>b?a>c?a:c:b>c?b:c; 這個(gè)式子表示的是求三個(gè)數(shù)最大值。根據(jù)結(jié)合性自右向左,先算b>c?b:c求b和c的最大值,在算a>c?a:c求a和c的最大值。最后比較a與b的值。

a=b+c=a+b;這種寫(xiě)法是錯(cuò)誤的,因?yàn)樗慕Y(jié)合性自右向左,且+優(yōu)先級(jí)比=高,所以是先把a(bǔ)+b的值賦值給b+c,我們無(wú)法把一個(gè)值賦值給表達(dá)式,即賦值號(hào)左邊不能為式子。

五、格式轉(zhuǎn)換規(guī)則

1、運(yùn)算符左右兩邊類型相同時(shí),得到的結(jié)果也是這個(gè)類型。例:1/2=0,10/3=3

2、運(yùn)算符左右兩邊類型不同時(shí),先把他們往精確度更高的一側(cè)轉(zhuǎn)換,變?yōu)橄嗤念愋汀?例:1.0/2=0.5,10/3.0=3.333333

3、賦值號(hào)右面的數(shù)據(jù)會(huì)自動(dòng)轉(zhuǎn)換為左面的數(shù)據(jù)類型。例:int a=2.678。a的值為2

4、我們可以對(duì)數(shù)據(jù)進(jìn)行強(qiáng)制類型轉(zhuǎn)換。例:float a=2.789,(int)(a);a的類型變?yōu)閕nt,值為2

上一篇:linux開(kāi)發(fā):linux最大線程數(shù)分析

下一篇:C語(yǔ)言:算術(shù)表達(dá)式

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部