久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

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

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

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




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

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

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


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

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

IMG_20190604_094031.jpg

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

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

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

IMG_20190604_094749.jpg

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

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

也不知 ...

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

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

IMG_20190605_211228.jpg

作者: zhang_s    時間: 2019-6-5 22:39
這個問題有點難
作者: 羽翼qhy    時間: 2019-6-6 00:01
+號在右邊
作者: 鄭漢松    時間: 2019-6-7 11:43
int x=0,y=0;     y=x++;   printf(“x=%d,y=%d”,x,y);  就會看到x=1,y=0
作者: SOsong    時間: 2019-6-7 15:47
運算優(yōu)先級的問題
作者: sudoapt    時間: 2019-6-7 21:10
這題很簡單  首先x,y初值都是零,執(zhí)行y=x++這個語句時  因為x++是先把值給y  自身才加一  所以y=0,然后x++這個語句只是單純的  實際上x沒有得到值所以還是為零  不知道這樣說你能不能明白
作者: 狂野的野馬    時間: 2019-6-8 10:57
把兩個+號放在x的左邊就是先算x+1的值賦給y
作者: 1008622    時間: 2019-6-12 18:34
y=x++是先用x=0再在+1
作者: 1008622    時間: 2019-6-12 18:35
y=x++是先用再+1    y=++x才是+1再用
作者: cyfdc51    時間: 2019-6-12 20:11
是先x賦給y,然后x自加1
作者: 徐佳俊    時間: 2019-6-12 20:43
是對的哦 ,建議你看下程序有沒有錯誤
作者: CJ_Z    時間: 2019-6-12 22:20
優(yōu)先級不一樣,++的優(yōu)先級小于=的優(yōu)先級
作者: Terryzsq    時間: 2019-6-12 22:30
y應(yīng)該是y=y++吧
作者: stephanie_han    時間: 2019-6-13 17:12
x++是先取x的值 再執(zhí)行x=x+1   你想要預(yù)期結(jié)果的話要寫y=++x
作者: chenquan111    時間: 2019-6-13 17:15
x++,是x先取值0、就是y=0,然后x再自加1,x=1了;
作者: chenquan111    時間: 2019-6-13 17:17
這是對的
作者: 963353797    時間: 2019-6-13 21:02
把++的語法好好復(fù)習(xí)一下吧
作者: 暴躁蘿莉    時間: 2019-6-19 12:17
應(yīng)該是所用軟件的規(guī)則不一樣吧。可能平臺不支持這種語法
作者: 啦啦啦嘿嘿嘿    時間: 2019-6-19 18:23
運算優(yōu)先級的問題?,++跟賦值號的優(yōu)先級的優(yōu)先問題,實際應(yīng)用最簡單的辦法就是分開2行或者加個括號什么的.根本沒必要去記那些運算優(yōu)先級... 像這樣寫 x++; y=x; 就肯定不會有問題了.
作者: TP987150    時間: 2019-6-19 22:01
不呀,完全沒有錯?赡苁悄愕木幾g器有問題,我用Codeblocks運行后,輸出X=1,Y=0
作者: TP987150    時間: 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    時間: 2019-6-20 08:08
++X, 表示先自加, 再進行運算, 而 X++表示先運算, 后自加.
作者: peigongo    時間: 2019-6-20 09:46
是對的 你先看看那個++ -- 的運算
作者: 暗淡無存、    時間: 2019-6-20 11:54
這個是先賦值再加,++i是先加再賦值的

作者: yex19321    時間: 2019-6-20 12:07
x++是實現(xiàn)x自增,但是返回x原來的值的,
作者: 大西瓜嫖客    時間: 2019-6-20 15:41
printf輸出之后實際結(jié)果是x=1,y=0




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 逼逼网| 国产 日韩 欧美 制服 另类 | 国产一区亚洲二区三区 | 91人人在线| 天天综合永久 | 精品久久久久一区二区国产 | 欧美淫片 | 中文字幕在线精品 | 黄视频网址 | 日韩一级免费 | 亚洲精品视频免费观看 | 精品欧美一区二区三区 | 国产精品一区二区福利视频 | 欧美成人精品一区二区三区 | 国产日韩精品视频 | 伊人免费在线观看 | 国产精品毛片一区二区在线看 | 81精品国产乱码久久久久久 | 久久综合影院 | 久久国品片 | 久久国产一区二区 | 在线视频一区二区三区 | 91久久精品国产免费一区 | 亚洲色图第一页 | 欧美中文字幕一区二区三区亚洲 | 国产探花在线精品一区二区 | 国产韩国精品一区二区三区 | 成人三级视频在线观看 | 久久r精品 | 国产成人一区二区三区精 | 亚洲一二三区在线观看 | 亚洲欧美中文日韩在线v日本 | 超碰在线播 | 久久九七 | 日韩欧美一区二区三区四区 | 中文字幕亚洲一区 | 久久九七 | 亚洲网站在线观看 | 国产精品视频导航 | 免费久久网站 | 久久久久久久综合 |