设为首页 加入收藏

TOP

C语言查遗补缺――关于自增运算符的有趣的例子 (一)
2014-11-23 22:57:38 来源: 作者: 【 】 浏览:1
Tags:语言 查遗 补缺 关于 运算 符的 有趣 例子

只是找了一些例子并运行,没有总结出个规律来,想不清楚内部机制,大家一起给总结一下吧~

首先是跟宏定义结合,这是笔试题中可能遇到的题目,然后展开讨论,关于后自增在逻辑运算符和加法运算符中的区别,但是没有总结出规律,也不明白本质上怎么破。。欢迎大家留言给予指导~


[cpp]
#define BAND1(x) (((x) >= 5)&&((x) <= 10) (x) : 0)

#define BAND2(x) (((x) >= 5)&&((x) <= 5) (x) : 0)

int main()
{
int a;
int i = 5;
printf("\ntest1----->>>>>>>>>>>>\n");
printf("BAND1(++i) = %d\n", BAND1(++i)); //8
printf("i = %d\n", i); //8

i = 5;
printf("\ntest2----->>>>>>>>>>>>\n");
printf("BAND1(i++) = %d\n", BAND1(i++)); //7
printf("i = %d\n", i); //8

i = 5;
printf("\ntest3----->>>>>>>>>>>>\n");
printf("BAND2(++i) = %d\n", BAND2(++i)); //0
printf("i = %d\n", i); //7
/*说明在((x) >= 5)&&((x) <= 5)部分执行了两次自增 */

i = 5;
printf("\ntest4----->>>>>>>>>>>>\n");
printf("BAND2(i++) = %d\n", BAND2(i++)); //0
printf("i = %d\n", i); //7
/*说明在((x) >= 5)&&((x) <= 5)部分执行了两次自增 */

i = 0;
a = (i++) + (i++) + (i++);
printf("\ntest5----->>>>>>>>>>>>\n");
printf("a = %d\n", a); //0
printf("i = %d\n", i); //3
/*问题是在条件运算符内部就自增了,可是加法时就没有自增,自增操作的时机是?*/

i = 4;
a = (i++ >= 5);
printf("\ntest6----->>>>>>>>>>>>\n");
printf("a = %d\n", a); //0
printf("i = %d\n", i); //5
/*说明在(i++ >= 5)部分没有自增,比较完后才自增 */

i = 4;
a = (i++ >= 5)+(i++ >= 5);
printf("\ntest7----->>>>>>>>>>>>\n");
printf("a = %d\n", a); //1
printf("i = %d\n", i); //6
/*说明在第一个(i++ >= 5)之后,第二个(i++ >= 5)之前自增, 再执行加法*/

i = 4;
a = (i++ >= 4)&&(i++ >= 5);
printf("\ntest8----->>>>>>>>>>>>\n");
printf("a = %d\n", a); //1
printf("i = %d\n", i); //6
/*说明在(i++ >= 4)之后,(i++ >= 5)之前自增, 再执行逻辑运算*/

i = 1;
a = (i--)&&(i);
printf("\ntest9----->>>>>>>>>>>>\n");
printf("a = %d\n", a); //0
printf("i = %d\n", i); //0
/*说明在(i--)之后,i之前自减,再执行逻辑运算*/

i = 1;
a = (i)&&(i--);
printf("\ntest10----->>>>>>>>>>>>\n");
printf("a = %d\n", a); //1
printf("i = %d\n", i); //0
/*说明在(i)之后,i--之前没有自减,再执行逻辑运算*/

#define BAND1(x) (((x) >= 5)&&((x) <= 10) (x) : 0)

#define BAND2(x) (((x) >= 5)&&((x) <= 5) (x) : 0)

int main()
{
int a;
int i = 5;
printf("\ntest1----->>>>>>>>>>>>\n");
printf("BAND1(++i) = %d\n", BAND1(++i)); //8
printf("i = %d\n", i); //8

i = 5;
printf("\ntest2----->>>>>>>>>>>>\n");
printf("BAND1(i++) = %d\n", BAND1(i++)); //7
printf("i = %d\n", i); //8

i = 5;
printf("\ntest3----->>>>>>>>>>>>\n");
printf("BAND2(++i) = %d\n", BAND2(++i)); //0
printf("i = %d\n", i); //7
/*说明在((x) >= 5)&&((x) <= 5)部分执行了两次自增 */

i = 5;
printf("\ntest4----->>>>>>>>>>>>\n");
printf("BAND2(i++) = %d\n", BAND2(i++)); //0
printf("i = %d\n", i); //7
/*说明在((x) >= 5)&&((x) <= 5)部分执行了两次自增 */

i = 0;
a = (i++) + (i++) + (i++);
printf("\ntest5----->>>>>>>>>>>>\n");
printf("a = %d\n", a); //0
printf("i = %d\n", i); //3
/*问题是在条件运算符内部就自增了,可是加法时就没有自增,自增操作的时机是?*/

i = 4;
a = (i++ >= 5);
printf("\ntest6----->>>>>>>>>>>>\n");
printf("a = %d\n", a); //0
printf("i = %d\n", i); //5
/*说明在(i++ >= 5)部分没有自增,比较完后才自增 */

i = 4;
a = (i++ >= 5)+(i++ >= 5);

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言中不定参数函数的使用 下一篇多维数组的实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: