今天是第二天,本来想敲两个上课讲的代码,正好那两个以前也没有见过。最后还是决定选择了自增。谁叫这玩样二级必考呢。
自增分两种,前自增和后自增。哪个写在前面就优先运算哪个。我用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语言中,自增的本意应该是循环,没事少用在运算中。