偶尔间看到一个面试题:如下别打印 口算结果,分析一下,谁讲的好就得分
int a = 2;
int s1 = a + 3 * a++;
int s1 = (a++) + 3 * a;
2个s1分别是多少

解决方案 »

  1.   

    8和12int s1 = a + 3 * a++;  初始值a=2,s1=2+3*(2++);  第一次s1值得到之后 a进累加
    a++表示的是a=2先进行计算,计算完毕之后a加上1;也就是s1求完之后a的值就变为3;第二个s1=(3++)+3*3=12;
    该题应该考的是++这个运算符和各个运算符的优先级。
    不知道分析的对不对
      

  2.   

    s1=a+3*2->s1=3+6->s1=9(a=3)s2=a+3*3->s2=4+9->s2=13
      

  3.   

    int a = 2;
    int s1 = a + 3 * a++;
    int s1 = (a++) + 3 * a;
    2个s1分别是多少?
    首先我们来了解一下a++与++a的概念,a++也就是先运算再自加,++a就是先自加,在运算,那么接下来的题目就简单了!
    int s1 = a + 3 * a++; 初始值a=2,s1=2+3*(2++); 第一次s1值得到的表达式为s1=2+3*2,结果为8;再这步运算好后,a的值就变为3;那么第二个表达式int s1 = (a++) + 3 * a变为s1=(3++)+3*3=12;
      

  4.   

    第一个 是8, 也就是 s1 = 2 + 3 * 2; 如果换成 s1 = 3*(a++) + a 结果就是s1=3*2+3=9;主要有个先后顺序问题,就是a 和3 * (a++)的先后顺序。 
    第二个 11,是 先a = a + 1;因为是先取值,再自增,所以 s1 = 2 + 3 * 3=11; 之所以是3* 3是因为s1 = (a++) + 3 * a ; (a++)在前面。如果换成(a++)在后面s1 = 3 * a + (a++);结果就是 s1 = 3 * 2 + 2 = 8。
    如果换成 s1 =  3 * a + (++a);结果就是 s1 = 3 * 2 + 3 =9;
     本人菜鸟,连个最基本的字符串转ASCII都写不出来,感觉这个面试官很脑残,脑残到家了,不知道分析的对不对
      

  5.   

    第一个 是8, 也就是 s1 = 2 + 3 * 2; 如果换成 s1 = 3*(a++) + a 结果就是s1=3*2+3=9;主要有个先后顺序问题,就是a 和3 * (a++)的先后顺序。  
    第二个 11,是 先a = a + 1;因为是先取值,再自增,所以 s1 = 2 + 3 * 3=11; 之所以是3* 3是因为s1 = (a++) + 3 * a ; (a++)在前面。如果换成(a++)在后面s1 = 3 * a + (a++);结果就是 s1 = 3 * 2 + 2 = 8。
    如果换成 s1 = 3 * a + (++a);结果就是 s1 = 3 * 2 + 3 =9;
    顶下