1樓:匿名使用者
這個拆開就知道了
1. a = 1 a+=a-=a+a;
先算a+a 為 2,並記下這個值
a -= 2
這時 a值為 -1
a += -1
最後 a 為 -2
2 a =1 b=(a++) +(++a)
這個 b的結果為3 或 4, a 為3
這個是屬於c標準中的未定義行為,如果你是一個管理人員,你的員工寫出這種**,你可以fire掉他了。
給你補充一下第二個問題,這個之所以說是,3或4,是因為這行**是有問題的,可以認為這是一個有歧義的語句,因為不同的編譯器會做不同的處理。
有的可能會把 a++ 中a的值先拿出來,也就是1, 再把++a的值拿出來,也就是2,並把置為2,再把1+2的值傳為b,這樣就是3了,也有的是,把所有的前自增放在前面自增完了再用,這時可以拆成
a=1;
a+=1;
b= a + a;
a+=1;
這樣b就是4了。
語言標準裡是明確指出,這是一種未定義行為的,如果你的編譯器對標準嚴格支援,那麼這類**是不應該通過編譯的,換言之,這**是錯的。
2樓:匿名使用者
這是程式設計裡面的,要從右向左看,意思是將等號右邊的計算結果賦值給等號左邊的變數(本題中等號左邊的變數即為a),可以拆分成兩個式子:
1. a-=a+a;
2. a+=(a-=a+a);
+=、-=這兩個符號好像是為了節約記憶體什麼的而設計的,上面兩個式子的真實意思為:
1. a=a-(a+a);
2. a=a+(第一個式子的計算結果)
由於是從右向左的,所以需要先計算整個式子最後邊的等號,即第1個式子:
a=a-(a+a)
計算結果為a=a,意思為將等號右邊的a的值賦值給等號左邊的a,因此第1個式子的計算結果為a的值不變,依然是a的原始值;
再計算第2個式子:
a=a+(第一個式子的計算結果)
代入第1個式子的計算結果,得到:
a=a+a
即a=2
第二個是 先用後加 先加後用
所以是3
3樓:
結果:a=-2,b=4
a+=a-=a+a:根據c語言語法運算子優先順序,先計算的是a+a結果為2,再計算a-=a+a,即:a=a-2,結果為-1,此時a的值也為-1,再計算a+=a,即:
-1加-1結果為-2。
可按此理解:a+=[a-=(a+a)]
b=(a++)+(++a):a++結果為2,++a結果也為2,b的值為4。
附程式執行結果圖:
看看c語言運算優先順序就知道了……
4樓:清瘋臥月
1a-=a+a;//a=-1;
a+=a;//a=-2;
2b=4;//用括號括起來表示兩個同時操作
5樓:旺仔大氣球
一個是自加 一個是賦值
6樓:匿名使用者
1 a+=a-=a+a 你這樣看編譯器見到 += 這樣計算的 a= a+ (a-=a+a)
依次拆分 不就是從右往左
2 b=(a++)+(++a) ()的優先順序別最高 先計算 a++ a++的值為 1 a = 2
在計算 ++a 因為a=2 ++a 和 a都是 3b = 1 + 3 = 4 a= 3
7樓:
1、分析下來就是 a=a+(a-(a+a)) =>a=a+(a-2a) =>a=a+(-a) =>a=0
至於為什麼從右開始,應該就是數學裡的小括號的問題了:)2、a++ 先計算後+1 所有(a++)=1 但是a已經=2了++a 先+1再計算,2+1=3 再計算1+3所以結果肯定是4啦
至於順序,還是小括號的問題啊 小括號擁有優先權。學過數學的都知道小括號裡的先計算嘛
c語言程式設計,求高手,C語言程式設計,求高手!!!!!!!!
include void main if max i int num scanf d num for n 0 d n num n printf d n 位序從0開始 include int main if noswap 1 break for i 0 i 10 i printf d a i prin...
c語言習題請高手幫忙解答,C語言習題請高手幫忙解答
1.1 200 2500 2 i 200,j 2500 3 i 200 j 2500 2.i 12 j 0k 0 3.複合語句在語法上被認為是一條語句。空語句形式是隻有一個分號的空行 4.c語句最後用分號結束 1 200 2500 2 i j 200 2500 3 i j 200 2500 第二道題...
求高手解答c語言問題,求高手解答,C語言問題
當使用者按下某個鍵時,1.鍵盤會檢測到這個動作,並通過鍵盤控制器把掃描碼 scan code 傳送到計算機 鍵盤掃描碼跟具體的硬體有關的,不同廠商對同一個鍵的掃描碼有可能不同。2.計算機接收到掃描碼後,將其交給鍵盤驅動程式 3.鍵盤驅動程式把這個掃描碼轉換為鍵盤虛擬碼 虛擬碼與具體硬體無關,不同廠商...