欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 初學(xué)C51單片機(jī),遇到個(gè)奇怪的C語言問題 [打印本頁]

作者: z43218    時(shí)間: 2019-6-3 16:43
標(biāo)題: 初學(xué)C51單片機(jī),遇到個(gè)奇怪的C語言問題
int x=0,y=0;
y=x++;

按道理x=1,y=0
實(shí)際結(jié)果都是0

麻煩大家有空幫我看看,問題在哪,先謝了
作者: devcang    時(shí)間: 2019-6-3 21:17
++符號(hào),在變量名的右邊,是先取值、再自加1,即先把x值給y、x再自加1




~~~~~~~~~~~~~~~~~
作者: honey_teck    時(shí)間: 2019-6-3 21:27
不知你是怎么看到結(jié)果的,如果軟件仿真,斷點(diǎn)設(shè)置在y=x++;之后,應(yīng)該就是看到這個(gè)結(jié)果y=0,x=1,。
作者: angmall    時(shí)間: 2019-6-3 22:26
這個(gè)不奇怪,你用x++ ,這個(gè)是先賦值給y 才加一

作者: y309976659    時(shí)間: 2019-6-3 22:59
單純從語法角度,執(zhí)行完y=x++;這句后,y=0,x=1是肯定的。
作者: cjm82    時(shí)間: 2019-6-4 00:42
運(yùn)算優(yōu)先級(jí)的問題? ++跟賦值號(hào)的優(yōu)先級(jí)我也不記得了,這種東西在譚浩強(qiáng)的書里面最多,什么i++ ++i之類的....實(shí)際應(yīng)用最簡單的辦法就是分開2行或者加個(gè)括號(hào)什么的.根本沒必要去記那些運(yùn)算優(yōu)先級(jí)...
像這樣寫
x++;
y=x;
就肯定不會(huì)有問題了.
作者: 幻劍心    時(shí)間: 2019-6-4 02:13
完整代碼沒有怎么看。。。根據(jù)你給的代碼,確實(shí)是y=0; x=1;。
作者: wulin    時(shí)間: 2019-6-4 06:14
樓主要搞清楚x++與++x的區(qū)別,y=x++;表示x先對(duì)y賦值然后再自+1,y=++x;表示x先自+1然后再對(duì)y賦值。
作者: yzwzfyz    時(shí)間: 2019-6-4 08:19
這個(gè)問題取決于編譯平臺(tái)如何判定。
樓主可以按照自己的想法,做一個(gè)平臺(tái),就按你的意思編譯。也不能認(rèn)為你就是錯(cuò)的。

作者: 笨笨兔    時(shí)間: 2019-6-4 08:31
樓主應(yīng)該先看看C運(yùn)算的優(yōu)先級(jí),運(yùn)算優(yōu)先級(jí)搞不清楚,其他都是瞎扯。
作者: iccee    時(shí)間: 2019-6-4 09:15
這個(gè)不奇怪,你用x++ ,這個(gè)是先賦值給y 才加一
x++與++x的區(qū)別,y=x++;表示x先對(duì)y賦值然后再自+1,y=++x;表示x先自+1然后再對(duì)y賦值。
++符號(hào),在變量名的右邊,是先取值、再自加1,即先把x值給y、x再自加1


作者: laofang20190604    時(shí)間: 2019-6-4 09:38
單純從規(guī)范的角度,不建議這種寫法。
作者: z43218    時(shí)間: 2019-6-4 09:46
首先感謝大家的回復(fù)。
下面是代碼和仿真頁面,方向綠色箭頭的代碼居然沒有編譯,所以結(jié)果就是0(紅色圈內(nèi))

IMG_20190604_094031.jpg (2.16 MB, 下載次數(shù): 59)

IMG_20190604_094031.jpg

作者: z43218    時(shí)間: 2019-6-4 09:52
接下來,我把代碼,j=i++;改為 i++; 也就是說,去掉j=,所有代碼就全部編譯了,而且結(jié)果也正確。

也不知道為什么,但同樣的代碼在c++中就沒有這個(gè)問題。是不是和keil有關(guān)系,我用的是keil4

IMG_20190604_094749.jpg (2.18 MB, 下載次數(shù): 44)

IMG_20190604_094749.jpg

作者: Pee_32    時(shí)間: 2019-6-4 10:59
++和--在后面,先賦值再++。在前面先++再賦值
作者: yzwzfyz    時(shí)間: 2019-6-4 11:25
沒有什么為什么,就是編譯平臺(tái)的定義,換個(gè)平臺(tái)或許就可以。
所以,用KELL,就看KELL的的規(guī)定!
盡可采用“不會(huì)引起岐義方式寫程序”
不過某些老師,為了顯擺自己,就是歡喜搞一些易歧義問題來坑人。
作者: chumingyu    時(shí)間: 2019-6-4 12:09
這個(gè)是keil的代碼優(yōu)化的結(jié)果,x和y對(duì)整個(gè)程序無實(shí)際意義,kei給優(yōu)化掉了。你可以試著改改優(yōu)化等級(jí)。

作者: 幻劍心    時(shí)間: 2019-6-4 18:09
z43218 發(fā)表于 2019-6-4 09:52
接下來,我把代碼,j=i++;改為 i++; 也就是說,去掉j=,所有代碼就全部編譯了,而且結(jié)果也正確。

也不知 ...

經(jīng)過測試,這是Keil的坑。感覺所有的等式剛開始都不會(huì)被執(zhí)行,只有++的變量被調(diào)用了,才會(huì)執(zhí)行。
如下修改成下面就好了。
        int i,j,k;
        i=0;
        j=0;
        j=i++;
        k=i;
        LED =0;
        while(1);
作者: a51    時(shí)間: 2019-6-4 19:32
加號(hào)在右邊,那是先進(jìn)行賦值在加一,所以執(zhí)行語句后值不改變
作者: somesun    時(shí)間: 2019-6-4 21:39
“++”放在左邊才是1,放在右邊是先賦值再計(jì)算
作者: chenc    時(shí)間: 2019-6-5 09:05
建議詳細(xì)查看c基礎(chǔ),查閱運(yùn)算符結(jié)合規(guī)則,然后編程實(shí)踐
作者: ZGJ20170905    時(shí)間: 2019-6-5 09:56
y = ++x,相當(dāng)于 x=x+1; y= x;
y = x++,相當(dāng)于 y = x; x=x+1;
作者: lele5211314    時(shí)間: 2019-6-5 17:45
是0就對(duì)了
作者: z43218    時(shí)間: 2019-6-5 21:29
非常感謝大家來解答問題,
現(xiàn)在問題已經(jīng)找到,如下面照片,是keil的C51編譯優(yōu)化設(shè)置,軟件默認(rèn)是8,改為7,問題就解決了

IMG_20190605_211228.jpg (626.36 KB, 下載次數(shù): 46)

IMG_20190605_211228.jpg

作者: zhang_s    時(shí)間: 2019-6-5 22:39
這個(gè)問題有點(diǎn)難
printf輸出之后實(shí)際結(jié)果是x=1,y=0

作者: 羽翼qhy    時(shí)間: 2019-6-6 00:01
+號(hào)在右邊
作者: 鄭漢松    時(shí)間: 2019-6-7 11:43
int x=0,y=0;     y=x++;   printf(“x=%d,y=%d”,x,y);  就會(huì)看到x=1,y=0
作者: SOsong    時(shí)間: 2019-6-7 15:47
運(yùn)算優(yōu)先級(jí)的問題
作者: sudoapt    時(shí)間: 2019-6-7 21:10
這題很簡單  首先x,y初值都是零,執(zhí)行y=x++這個(gè)語句時(shí)  因?yàn)閤++是先把值給y  自身才加一  所以y=0,然后x++這個(gè)語句只是單純的  實(shí)際上x沒有得到值所以還是為零  不知道這樣說你能不能明白
作者: 狂野的野馬    時(shí)間: 2019-6-8 10:57
把兩個(gè)+號(hào)放在x的左邊就是先算x+1的值賦給y
作者: 1008622    時(shí)間: 2019-6-12 18:34
y=x++是先用x=0再在+1
作者: 1008622    時(shí)間: 2019-6-12 18:35
y=x++是先用再+1    y=++x才是+1再用
作者: cyfdc51    時(shí)間: 2019-6-12 20:11
是先x賦給y,然后x自加1
作者: 徐佳俊    時(shí)間: 2019-6-12 20:43
是對(duì)的哦 ,建議你看下程序有沒有錯(cuò)誤
作者: CJ_Z    時(shí)間: 2019-6-12 22:20
優(yōu)先級(jí)不一樣,++的優(yōu)先級(jí)小于=的優(yōu)先級(jí)
作者: Terryzsq    時(shí)間: 2019-6-12 22:30
y應(yīng)該是y=y++吧
作者: stephanie_han    時(shí)間: 2019-6-13 17:12
x++是先取x的值 再執(zhí)行x=x+1   你想要預(yù)期結(jié)果的話要寫y=++x
作者: chenquan111    時(shí)間: 2019-6-13 17:15
x++,是x先取值0、就是y=0,然后x再自加1,x=1了;
作者: chenquan111    時(shí)間: 2019-6-13 17:17
這是對(duì)的

作者: 963353797    時(shí)間: 2019-6-13 21:02
把++的語法好好復(fù)習(xí)一下吧
作者: 暴躁蘿莉    時(shí)間: 2019-6-19 12:17
應(yīng)該是所用軟件的規(guī)則不一樣吧。可能平臺(tái)不支持這種語法
作者: 啦啦啦嘿嘿嘿    時(shí)間: 2019-6-19 18:23
運(yùn)算優(yōu)先級(jí)的問題?,++跟賦值號(hào)的優(yōu)先級(jí)的優(yōu)先問題,實(shí)際應(yīng)用最簡單的辦法就是分開2行或者加個(gè)括號(hào)什么的.根本沒必要去記那些運(yùn)算優(yōu)先級(jí)... 像這樣寫 x++; y=x; 就肯定不會(huì)有問題了.
作者: TP987150    時(shí)間: 2019-6-19 22:01
不呀,完全沒有錯(cuò)。可能是你的編譯器有問題,我用Codeblocks運(yùn)行后,輸出X=1,Y=0
作者: TP987150    時(shí)間: 2019-6-19 22:04
完全是正確的,可能是你的編譯器有問題,或者你操作失誤,我用的Codeblocks

27($(UN9YF2%@XW9XK$LJ$1.png (22.91 KB, 下載次數(shù): 132)

27($(UN9YF2%@XW9XK$LJ$1.png

GA%T[5H_XB_3N_E}3Q%8W6R.png (250.23 KB, 下載次數(shù): 139)

GA%T[5H_XB_3N_E}3Q%8W6R.png

作者: ping264888    時(shí)間: 2019-6-20 08:08
++X, 表示先自加, 再進(jìn)行運(yùn)算, 而 X++表示先運(yùn)算, 后自加.
作者: peigongo    時(shí)間: 2019-6-20 09:46
是對(duì)的 你先看看那個(gè)++ -- 的運(yùn)算
作者: 暗淡無存、    時(shí)間: 2019-6-20 11:54
這個(gè)是先賦值再加,++i是先加再賦值的

作者: yex19321    時(shí)間: 2019-6-20 12:07
x++是實(shí)現(xiàn)x自增,但是返回x原來的值的,




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1