語句xa5,ba執行後,x a b的值依次為

時間 2022-05-23 07:15:04

1樓:匿名使用者

結果都是6,整個表示式運算結果如下。

0.你首先要牢記,當一個變數被賦予一個新值的時候,舊值就沒有了

1.a首先被賦予5這個值。

2.++在前面是先加後算,所以a先自增為6,這時候5就已經沒有了。

3.a自增過後,b被賦予運算過後的a,也就是6了。

4.因為逗號表示式(括號中多個逗號的就是逗號表示式,一般最後計算)的值總是取括號中的最後一個,所以x取b的值,還是6。

不信可以自己寫程式試試……

擴充套件一下,考慮下面這個表示式:

int x,a,b,c;

x = (a = 5, b=a++,c=++a,456,789);

//肯定先從括號中開始算起。

//a剛開始等於5

//b=a++,++運算在後,先算後加,先把a的5給b,然後把a加1,此時b為5,a為6

//c=++a,++運算在前,先加後算,因為上一個式子a已經是6了,所以a再加1,變成7,再給c,此時a為7,c也為7。

//最後才算逗號,x肯定是取後面一個的值,也就是789。

//所以最後x=789,a=7,b=5,c=7

因為不知道你是學c,還是c++的,這兩個式子,具體程式設計輸出方法我就不寫了。

2樓:匿名使用者

我把最終的彙編**貼出來,附上翻譯,你一看便知

mov dword ptr [a],5 //把5放到變數a中

mov eax,dword ptr [a] //把a的值放到暫存器eax中

add eax,1 //eax+1

mov dword ptr [a],eax //把eax的值賦給變數a,a=6

mov ecx,dword ptr [a] //把a的值給ecx

mov dword ptr [b],ecx //把ecx的值給變數b

mov edx,dword ptr [b] //把變數b的值給edx

mov dword ptr [x],edx //把edx的值賦給x,很顯然,此刻 b=6 x= 6,1樓給出了錯誤答案

3樓:傻帽天才

a 是6 a的值 以括號表示式中 最右邊那個表示式的值 作為它最終的結果值。

以後遇到類似情況都是這個原則 括號裡邊最後邊表示式的值 為 最終的結果值 。

4樓:血天藍海

怎麼有括號...求不出來的啊...括號裡面又不是計算式...去掉括號的話...x=5 a=6 b=6

5樓:藍心西瓜

x=6;

a=6;

b=6;

6樓:匿名使用者

a不變,b為六,x為五

執行語句x=(a=4,b=a--,a++)後,xab的值依次為

7樓:

x=3 a=4 b=4

逗號運算子,x=最後一個表示式的值

a=4b=a-- ;=>b=4 a=3

a++; =>x=3 a=4

8樓:匿名使用者

執行這句時:x=4,b=47,a=4.

執行這句後:x=4,b=3,a=5

9樓:匿名使用者

b=4,x=3,a=4

在c語言中,語句x= (a=3, b=++a);執行後,x,a,b的依次為 注:需要步驟

10樓:喵不語

首先a=3.b=++a=4.逗號表示式為最右邊式子的值,所以x=4

執行語句x=(a=3,b=a––);後,x,a,b的值

11樓:金色潛鳥

回答過了。

x=(a=3,b=a--);

表示式內 a-- 是字尾減減,所以表示式內用 a 的原值,出了表示式 再自減1,所以上式分解為 2式子:

x=(a=3,b=a);

a=a-1;

第一式右邊是逗號表示式,逗號表示式的結果等於右邊最後一個表示式的值。

所以 第一式,可以分解為:a=3; b=a; x=b;

這樣,原來的計算按步是:

a=3; b=a; x=b; (得 a=3,b=3,x=3)a=a-1; (得 a=2)

執行語句x=(a=3,b=a––);後,x,a,b的值 是 3,2,3

c語言的一道題int x, a, b; 語句x=(a=1, b=2, a+3, b+4, a+b)執行後, x、a、b的值依次為 求解為什麼

12樓:匿名使用者

逗號運算子,取最後一個表示式的值進行賦值,但是要把前面每個表示式都計算一遍,所以a=1,b=2,x=3

13樓:匿名使用者

x=3,a=1,b=2

逗號運算子返回最後一個表示式(a+b)的值,a和b在被賦值1和2後,沒有改變過。

語句x=(a=3,b=++a);x等於多少,能詳細點說明執行過程麼

14樓:匿名使用者

x最後等於4。

(a=3,b=++a)整體是一個逗號表示式,逗號表示式從左往右求值,整個表示式的值為逗號後面的表示式的值,換言之,(a=3,b=++a)的值即表示式(b=++a)的值,而(b=++a)是一個賦值表示式,其值為賦值後的左運算元(此處即b)。

模擬逗號表示式的求值過程,先求值表示式(a=3),將3賦值給a;然後求值表示式(b=++a),將a遞增並將遞增後(因為是前置++,所以遞增後再賦值)的值(此處即4)賦值給b。

最後執行x=(a=3,b=++a),因為(a=3,b=++a)的值是b,此處相當於將b賦值給x。通過先前的分析知道b此時的值為4,因此x最後也等於4。

15樓:

int a=0;a=++a;

生成的位元組碼是:

0 iconst_0 -----0壓入棧頂

1 istore_1 [a] -----棧頂值(0)存入區域性變數1(a)

2 iinc 1 1 [a] -----變數1自加(++a操作,自加後變數1的值為1)

5 iload_1 [a] -----變數1的值壓入棧頂(值為1)(++a效果)

6 istore_1 [a] -----將棧頂值(1)存入變數1(=操作)

a的值依次變化為:0->1->1x為4

語句x a 3,ba x等於多少,能詳細點說明執行

x最後等於4。a 3,b a 整體是一個逗號表示式,逗號表示式從左往右求值,整個表示式的值為逗號後面的表示式的值,換言之,a 3,b a 的值即表示式 b a 的值,而 b a 是一個賦值表示式,其值為賦值後的左運算元 此處即b 模擬逗號表示式的求值過程,先求值表示式 a 3 將3賦值給a 然後求值...

設有int a 3,b,則執行語句 b! a 2 後,b

宣鈺苑卿 根據運算子優先順序 條件運算子大於 賦值運算子,所以本題實際上是b a 3?2 1 因為a 3,所以a 3判定失敗,結果為1 所以b 1 1和1對於 a b c 1 b c 2 前後接兩個表示式,一個是 a b c 1,另一個是b c 2 第一個表示式結果為c 1即2 因為 a b 非0,...

明白0xa5之類的知識的進來,轉義字元 0xa5 錯在哪裡

char ch 0xa5 0xa5 表示字元數值,對一個char大小的變數ch容納不了這麼大的數,所以只用了 5 也就是 ascii 值 53,十六進位制 35,字元5。char ch 0xa5 字串,要 ch 5 才裝得下,4個字元 0xa5 何一個結束符 0 char ch 0x35 可以,0x...