++运算符
来源:互联网 发布:淘宝卖家体验中心 编辑:程序博客网 时间: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
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/
- 运算和运算符
- 运算符
- ??运算符
- 运算符
- << 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- ?? 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- 运算符
- Process类的使用
- 学会sql数据库关系图
- 为什么必须是final的呢?
- 自定义ExpandList效果
- 基于codebook model的运动目标检测—整理opencv源码
- ++运算符
- 反射API
- Linux下在内存映射文件中给计数器持续加1
- 添加到开机自动运行
- s2sh整合中hibernate两种配置方式中spring配置文件中的不同
- 判断该路径是文件还是文件夹
- ios UITableView封装之下拉-上提-图片异步加载
- 黑马程序员-笔记-04-基础
- 黑马程序员-笔记-05-基础