++运算符

来源:互联网 发布:淘宝卖家体验中心 编辑:程序博客网 时间:2024/06/06 02:49
/*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/

原创粉丝点击