++運算子

來源:互聯網
上載者:User

/*C 語言有這樣一個規則:每一個符號應該包含儘可能多的字元*/

    int i = j = 0;
/*  1. ++i++ means (++i)++. (++i)++ == 1, i == 2; ++i++編譯不通過,必須加上括弧
2. (++i)+++i means ((++i)++)+i. The value of the statement is 2, i == 2;
3. (++i)+++i++ means ((++i)++)+(i++). The value of the statement is 2, i == 3;
4. (++i)+++i+++i means ((++i)++)+(i++)+i.The value of the statement is 3, i == 3;
*/
/*C 語言有這樣一個規則:每一個符號應該包含儘可能多的字元*/
printf("(++i)+++i+++i = %d\n", (++i)+++i+++i);    //the result is 3
printf("i = %d\nj = %d\n\n", i, j);    //i = 3, j = 0;

完整程式
#include <stdio.h>

int main()
{
/////////////////j = (i++, i++, i++);//////////////////////////

int i = 0, j = 0;
j = (i++, i++, i++);    //逗號運算式,i 在遇到每個逗號後,認為本計算單位已經結束,i 這時候自加
printf("i = %d\nj = %d\n\n", i, j);    //i = 3, j = 2;

//////////////////////////////////////////////////////////////

i = j = 0;
printf("i = %d\nj = %d\n\n", i, j);    //i = 0, j = 0;

/////////////////j = (++i, i++, i+10);/////////////////////////

i = 3;
j = (++i, i++, i+10);
printf("i = %d\nj = %d\n\n", i, j);    //i = 5, j = 15;

//////////////////////////////////////////////////////////////

for(i = 0; i < 10 && printf("i1 = %d\n", i); i++, printf("i3 = %d\n\n", i))
{
printf("i2 = %d\n", i);
}

//////////////////////////////////////////////////////////////

i = j = 0;
j = (i++) + (i++) + (i++);    //i遇到分號才認為本計算單元結束,i這時候自加
printf("i = %d\nj = %d\n\n", i, j);    //i = 3, j = 0;

///////////////////////i+++j//////////////////////////////

i = j = 0;
printf("i+++j = %d\n", i+++j);    //i+++j means i++ + j;
printf("i = %d\nj = %d\n\n", i, j);    //i = 1, j = 0;

///////////////////////////////////////////////////////////

i = j = 0;
/*    1. ++i++ means (++i)++. (++i)++ == 1, i == 2; ++i++編譯不通過,必須加上括弧
2. (++i)+++i means ((++i)++)+i. The value of the statement is 2, i == 2;
3. (++i)+++i++ means ((++i)++)+(i++). The value of the statement is 2, i == 3;
4. (++i)+++i+++i means ((++i)++)+(i++)+i.The value of the statement is 3, i == 3;
*/
/*C 語言有這樣一個規則:每一個符號應該包含儘可能多的字元*/
printf("(++i)+++i+++i = %d\n", (++i)+++i+++i);    //the result is 3
printf("i = %d\nj = %d\n\n", i, j);    //i = 3, j = 0;

////////////////////////////////////////////////////////////

i = j = 0;
printf("(i++)+(++j) = %d\n", (i++)+(++j));    //The result is 1. i+++++j is wrong, because it means ((i++)++)+j, the second ++ has no left value.
printf("i = %d\nj = %d\n\n", i, j);    //i = 1, j = 1;

return 0;
}
VC++環境下連續自增(自減)運算規則
1、        在一般運算式中和在函數參數中計算的結果相同(這一點與Turbo C環境不同);
2、        尾碼:同運算式中Turbo C的情況相同:先統一取值後依次自增,如:
int a,i=5;  a=i+++i+++i++; a=15, i=8.
3、        首碼:對整型,前兩個自增同Turbo C,即依次自增後統一取值,後面的每個自增後即
取值,如:
   int a, i=5;  a= ++i +(++i)+(++i);  a=22, i=8.
          對實型,每個自增後即取值,如:
float  a, i=5;  a= ++i +(++i)+(++i);  a=21, i=8.
4、        前尾碼混合的情況:
(1)        一般情況:運算式中自左向右計算,參數自右向左運算。首碼自增後取值;尾碼(或變數)取值依其所處位置而定,有連續多個將統一取值,其自增在語句結束前進行。
(2)        前尾碼各有一個的情況:設int i=5; 由於i++*++i應滿足交換率與++i*i++相同,規定按後者計算故為36。實驗2內容4:int i=5; printf("%d,%d\n", --i, i++*++i ); 列印5,36。
(3)        若i++或++i或兩者有多於一個的情況:++i有兩個以上在一起時最左邊的連續自增同3、,其餘每個自增後取值,如:int i=5;
printf("%d\n%d\n",--i,(++i)+(i++)+(i++)+(++i)); 列印6和25
printf("%d\n%d\n",--i,(++i)+(++i)+(++i)+(++i)+(i++)); 列印8和40
printf("%d\n%d\n",--i,(++i)+(++i)+(++i)+i+(++i)+(++ i)); 列印9和49
(4)        函數參數中有括弧時,括弧參數優先計算,其餘參數仍自右向左計算,如:
int i=9,j=8; printf("%d  %d\n", (++i, j--), ++i); 列印8  11
         printf("%d  %d  %d\n", (++i, j--), ++i, i); 列印8  11  10

(5)        最後i的值等於原值加總自增次數減自減的次數

原始地址:http://helloouc.blog.163.com/blog/static/5530527120122219254638/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.