1樓:匿名使用者
a+=a-=a*a 等價於 a=a+(a=a-a*a) 為什麼?這個氏如亮問橡攔題是複合運算的縮寫,其實是:a=a+(a=a-a*a) 的簡寫,這是因為一些複合運算子的書寫規定:
比如:a=+b; 相當於:a=a+b ; 在上式中,b具體是殲寬乙個賦值表示式,其中 b 中有複合運算 a=a-a*a所以,這個式子 a+=a-=a*a 等價於 a=a+(a=a-a*a)如果a=5,則:
a+=a-=a*a 等價於 a=a+(a=a-a*a)先算括號內的,a=a-a*a 即 a=5-5*5=-20 ,此時,a=-20在算括號外的:a=a+a 即 a=(-20)+(20)= 40其實,我們可以自己編寫**到編譯器上去試驗一下我們分析得對不對:如下:
可以看到這兩種都是等價的,而且結果都是-40;
2樓:匿名使用者
a+=x等價與a=a+x所以a+=a-=a*a就等價於a=a+(a-=a*a)a-=x等價與a=a-x所以,又有a=a+(a-=a*a)等價於a=a+(a=a-a*a)a=5時先算括號,括號裡先算乘法,燃塌再算減法,最後者段皮將減法結果賦值給aa*a=25a-a*a=-20a=a-a*a=-20括號算完算a+()a+a=-20+(-20)=-40所以首差最後a=-40
複合賦值運算子
3樓:網友
在賦值運算子當中,還有一類c/c++獨有的複合賦值運算子。它們實際上是一種。
縮寫形式,使得對變數的改變更為簡潔。
total=total+3;
乍一看這行**,似乎有問題,這是不可能成立的。其實還是老樣子,'=是賦。
值不是等於。它的意思是本身的值加3,然後在賦值給本身。為了簡化,上面的。
**也可以寫成:
total+=3;
複合賦值運算子有下列這些:
符號 功能。
加法賦值。
減法賦值。
乘法賦值。
除法賦值。
模運算賦值。
=左移賦值。
=右移賦值。
位邏輯與賦值。
位邏輯或賦值。
位邏輯異或賦值。
上面的十個複合賦值運算子中,後面五個我們到以後位運算時再說明。
那麼看了上面的複合賦值運算子,有人就會問,到底total=total+3;與total+
3;有沒有區別?答案是有的,對於a=a+1,表示式a被計算了兩次,對於複合運。
算符a+=1,表示式a僅計算了一次。一般的來說,這種區別對於程式的執行沒有。
多大影響,但是當表示式作為函式的返回值時,函式就被呼叫了兩次(以後再說。
明),而且如果使用普通的賦值運算子,也會加大程式的開銷,使效率降低。
關於複合賦值運算的新手問題
4樓:網友
先算a/=a-6,9-6=3,a被賦值9/3=3
接下來a*=a,也就是a=a*a,注意a已經改變為3了,所以a被賦值為9
最後a+=a,也就是a=a+a,此時a被賦值為9+9=18
c語言(複合賦值表示式)問題
5樓:匿名使用者
題目的意思是:如果a=b=6,進過a*=b+=2運算後,得到b=8,a=48 程式採用自右向左進行計算,步驟如下:1、 b+=2 相當於b=b+2 此時a=6 b=82、 a*=b 相當於a=a*b 此時a=48 b=8 經過運算完了,結果就是:
a=48 b=8
6樓:匿名使用者
右結合,從右邊開始計算。
b+=2就是b=b+2所以b=8
a*=b就是a=a*9所以a=6*8=48
7樓:匿名使用者
這個很簡單啊。從右邊算起,首先是a=b=6,意思是先6賦給b,再將b的值賦給a,結果就是a=6;b=6;再乙個就是a=a*(b=b+2), 先算b , b=b+2,所以b的值為8了,接著算a,此時a=a*b;就是6*8=48;
在c語言中複合的賦值運算子怎麼處理
x x x x 你要正確拆開這個式子很重要 首先是 x x x 然後是 x 36 繼續 x x 36 x 30 x 30 x 30 30 60 c語言的這個運算應該從右向左賦值。對,頂樓說的對 把x 6代入公式,然後從右向左算。要點1 等符號的應用是同道理的 即把左邊的移過右邊運算 右邊用括號包住,...
C三目運算子問題關於c三目運算子的問題
三目運算就是下面這算式了 a a a z a 32 a它的意思是 a代表的字元在小寫字母 a 和 z 之間嗎?如果是,運算結果是a 32 如果不是,結果是a 這段程式應該是字母大小寫轉換,但有點問題。如果是想把小寫轉成大寫,後面應該是 a 32 如果是想把大寫轉成小寫,引號裡應該是大寫字母a和z 語...
c語言關於運算子的問題
在前九先執行j後在加,比方j 1 1 j 則先是1 j,當然1 j 2了,然後是執行j 這時j 2了,如果是1 j j的話,結果就改是1 1 2 4了,你推敲下是不是這樣 int m,j 5,t t j j j j 6 6 8 8 這裡我用vs2005編譯的是28,9,和你的26,9部一樣,這個可能...