新聞中心
1.表達(dá)式 !x 等價(jià)于:
?x==0
分析:
x | x==0 | !x |
非0 | 0 | 0 |
0 | 1 | 1 |
從而可以看出x==0與!x的邏輯結(jié)果是等價(jià)的
2.表達(dá)式 !!6的值是:
?1
補(bǔ)充:邏輯量:a(非0)為真,!a=0;!!a=1
3.表達(dá)式 ~(~2<<1)的值是:
?5
?解析:2的二進(jìn)制:10??~2:01 ~2<<1(左移一位 一般相當(dāng)于乘2)但這里沒(méi)有超出機(jī)器字所表示? ? ?的位數(shù)其實(shí)是010,后取反,即得101,也就是5
?補(bǔ)充:正常進(jìn)行移位運(yùn)算時(shí)一般需要轉(zhuǎn)換為2進(jìn)制,且補(bǔ)足8位,如若前面不夠全部添0
4.表達(dá)式 (z=0, (x=2)||(z=1),z) 的值是:
? 0
補(bǔ)充:逗號(hào)表達(dá)式
一些特點(diǎn)
1、逗號(hào)表達(dá)式是C語(yǔ)言優(yōu)先級(jí)最低的運(yùn)算符。
2、逗號(hào)表達(dá)式是左結(jié)合性(即按從左到右順序運(yùn)算)的運(yùn)算符。
常見(jiàn)表達(dá)式
//例一
#include
void main(){
?int x, y, z;
?o = x = 3, y = 4, z = 5;
?printf("x=%d,y=%d,z=%d,o=%d\n",x,y,z,o);
}
運(yùn)行結(jié)果:x=3,y=4,z=5,o=3
//例二
#include
void main(){
?int x, y, z, o;
?o = ( x = 3, y = 4, z = 5 );
?printf("x=%d,y=%d,z=%d,o=%d\n",x,y,z,o);
}
運(yùn)行結(jié)果:x=3,y=4,z=5,o=5
我們可以發(fā)現(xiàn)例一和例二中,變量o最終的結(jié)果是完全不同的。
我們可以先把上面兩個(gè)表達(dá)式簡(jiǎn)化成👇
例一:o = 表達(dá)式1,表達(dá)式2,表達(dá)式3;
因?yàn)槎禾?hào)表達(dá)式是優(yōu)先級(jí)最低的表達(dá)式,賦值表達(dá)式的優(yōu)先級(jí)高,所以會(huì)把表達(dá)式1的值直接賦值給o
例二:o = (表達(dá)式1,表達(dá)式2,表達(dá)式3);
括號(hào)里中的先執(zhí)行,逗號(hào)表達(dá)式是左結(jié)合性,所以會(huì)從左往右依次執(zhí)行,最后再把表達(dá)式3的值賦值給o
小結(jié)論:
結(jié)合以上兩個(gè)例子的運(yùn)行結(jié)果我們可以得出一個(gè)結(jié)論:
當(dāng)沒(méi)有括號(hào)時(shí),第一個(gè)表達(dá)式為整個(gè)表達(dá)式的值。
而有括號(hào)時(shí),依次執(zhí)行后,最后一個(gè)表達(dá)式為整個(gè)表達(dá)式的值。
而且所有的表達(dá)式都依次執(zhí)行了。
例題一
逗號(hào)表達(dá)式a=2*6,a*3,a+5的值為_(kāi)____?
逗號(hào)表達(dá)式的結(jié)果是整個(gè)表達(dá)式執(zhí)行完后最后的一個(gè)值。
所以我們可以假定逗號(hào)表達(dá)式的結(jié)果為o
把這個(gè)式子看成o=(a=2*6,a*3,a+5)
a=2*6=12,此時(shí)表達(dá)式的值為12
a*3并不是一個(gè)賦值語(yǔ)句,此時(shí)表達(dá)式的值還是12
運(yùn)算到這一步,可以看成o=(a+5)=12+5=17
該表達(dá)式的值為17
例題二
int a,表達(dá)式 (a=4*5,a+6),a++的值為_(kāi)____
逗號(hào)表達(dá)式的結(jié)果是整個(gè)表達(dá)式執(zhí)行完后最后的一個(gè)值。
所以我們可以假定逗號(hào)表達(dá)式的結(jié)果為o、
把這個(gè)式子看成o=((a=4*5,a+6),a++)
a=4*5=20,此時(shí)表達(dá)式的值為20
a+6并不是一個(gè)賦值語(yǔ)句,此時(shí)表達(dá)式的值還是20
a++是先賦值這條語(yǔ)句運(yùn)算完后才會(huì)+1,直到這里,表達(dá)式的值為20
例題三
int a,表達(dá)式為(a=4*5,a+6),a++ 執(zhí)行完后a的值為_(kāi)____
這個(gè)例題是求a的值,而不是表達(dá)式的值,這里表達(dá)式2(也就是a++)中的a=a+1也是會(huì)執(zhí)行的,所以a的值為21。
例題四
int x=5,y=8,z;
z=(x++,++y,x+y);
求z=_______
既然有括號(hào),那就先依次執(zhí)行前面的表達(dá)式,再把最后一個(gè)表達(dá)式賦值給z,
先執(zhí)行x++,x=x+1=5+1=6
再執(zhí)行y++,y=y+1=8+1=9
最后z=x+y=6+9=15
PS:如果這里的表達(dá)式三為x+++y,則要注意了!
z=(x++,++y,x+++y);
首先依次執(zhí)行x++得x=6、++y得y=9
后置++的優(yōu)先級(jí)大于前置++
所以這里是(x++)+y;而不是x+(++y);
(x++)+y這里先把x的值與y的值相加,隨后x再自增加1
也就是z=x+y;x=x+1;
這里z的值還是15,但是x的值又加了1,x=7
————————————————
版權(quán)聲明:本文為博主「DMWFJJ」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/DMWFJJ/article/details/122567247
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站名稱:浙大pta《c語(yǔ)言基礎(chǔ)》經(jīng)典例題-創(chuàng)新互聯(lián)
瀏覽地址:http://www.dlmjj.cn/article/docejd.html