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

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

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

按道理x=1,y=0
實際結果都是0

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




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

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

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


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

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

IMG_20190604_094031.jpg

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

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

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

IMG_20190604_094749.jpg

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

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

也不知 ...

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

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

IMG_20190605_211228.jpg

作者: zhang_s    時間: 2019-6-5 22:39
這個問題有點難
printf輸出之后實際結果是x=1,y=0

作者: 羽翼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
運算優先級的問題
作者: sudoapt    時間: 2019-6-7 21:10
這題很簡單  首先x,y初值都是零,執行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
優先級不一樣,++的優先級小于=的優先級
作者: Terryzsq    時間: 2019-6-12 22:30
y應該是y=y++吧
作者: stephanie_han    時間: 2019-6-13 17:12
x++是先取x的值 再執行x=x+1   你想要預期結果的話要寫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
把++的語法好好復習一下吧
作者: 暴躁蘿莉    時間: 2019-6-19 12:17
應該是所用軟件的規則不一樣吧?赡芷脚_不支持這種語法
作者: 啦啦啦嘿嘿嘿    時間: 2019-6-19 18:23
運算優先級的問題?,++跟賦值號的優先級的優先問題,實際應用最簡單的辦法就是分開2行或者加個括號什么的.根本沒必要去記那些運算優先級... 像這樣寫 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, 下載次數: 132)

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

GA%T[5H_XB_3N_E}3Q%8W6R.png (250.23 KB, 下載次數: 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++是實現x自增,但是返回x原來的值的,




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