前自增的学习和自我探讨

今天是第二天,本来想敲两个上课讲的代码,正好那两个以前也没有见过。最后还是决定选择了自增。谁叫这玩样二级必考呢。

自增分两种,前自增和后自增。哪个写在前面就优先运算哪个。我用Linus 红帽 和 Windows 的VC++6.0中试过,结果都一样。

我这主要对前自增bugg级别的探讨,(虽然没什么用),最后一句话,自增的本意不是预算,劲量不要用在预算中。

C 前自增的自我学习

/*

 *2017年7月12日19:18:23
 关于前自增的学习和自我探讨
 * */
#include<stdio.h>
int main()
{
int x= 8;
int y,z1,z2,z3,z4,z5,z6,z7,z8;


y = (++x) + (--x);


x = 8;
z1 = (++x) ;


x = 8;
z2 = (++x) + (++x);
/* 
* 输出结果 z2 = 20
* 很明显,这里系统两个'++x'先整体预算自加
* 得到x=10,然后再相加。
* */


x = 8;
z3 = (++x) + (++x) + (++x);
/*
* 输出结果 z3 = 31
* 这里我就充满了疑问,按照上面的规律,三个'++x'整体自加之后
* 得到x=11,然后三个相加得到33,结果却是31,
* 猜想:系统会先读取第一个+两边的做整体运算,然后再加上后面的多余部分
*
* */
x = 8;
z4 = (++x) + (++x) + (++x) + (++x);
/*
*输出结果 z4 = 43
证实猜想
* */

x = 8;
z5 = (++x) - (++x) + 1;
/*
* 输出结果z5 = 1
* */

x = 8;
z6 = (++x) + 1 - 1 + (++x);
/*
* 输出结果z6 = 20
* 猜想破灭
* */

x = 8;
z7 = (++x) + 1 - (++x);
/*
* 输出结果z7 = 0
* z5和z7对对比,我居然发现这个程序居然不符合加法互换准则,凌乱。
* 如果用我的猜想去解,是可以说的通,但并不能说通z6和z8
* */
x = 8;
z8 = (++x) + 1 - 1 + (++x) + (++x); 
/*
* 输出结果z8 = 31
* 感觉上只有前两个自增的时候才会和在一起先累加x的值,然后再与后面的预算
* 这个结论太蠢,我选择放弃
* */

printf("x = %d,y = %d\n",x,y);
printf("z1 = %d\n",z1);
printf("z2 = %d\n",z2);
printf("z3 = %d\n",z3);
printf("z4 = %d\n",z4);
printf("z5 = %d\n",z5);
printf("z6 = %d\n",z6);
printf("z7 = %d\n",z7);
printf("z8 = %d\n",z8);


return 0 ;
}
//c语言中,自增的本意应该是循环,没事少用在运算中。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值