static void Main(string[] args)
        {
            int a, b;
            a = b = 1;
            b += (a / b++);
            Console.WriteLine("{0},{1}",a,b);
        }输出 1,2何解?

解决方案 »

  1.   

    a一直没有改变过,所以仍为1
     b += (a / b++); 可以理解为 b=b+(1/1);
      

  2.   

    问题是这样也为 1,2  这++没起到任何作用?static void Main(string[] args)
            {
                int a, b;
                a = b = 1;
                b += (a / b);
                Console.WriteLine("{0},{1}",a,b);
            }
      

  3.   


    static void Main(string[] args) 

    int a, b;
     a = b = 1; 
    b += (a / ++b);
     Console.WriteLine("{0},{1}",a,b); }
      

  4.   


     double a, b;
                a = b = 1;
                b += (a / ++b);
      

  5.   

    呵呵,微软春季实习生笔试一题关于++i和i++
    int i=8;
    (i++)+=(i++)//i=?
    (i++)+=(++i)//i=?
    (++i)+=(i++)//i=?
    (++i)+=(++i)//i=?
    挺恶心的。呵呵
      

  6.   

    你了解i++和++i的区别么?书上应该有吧,i++是先用后自加,++i是先自加后用。
      

  7.   

    5楼的vs2008编译通不过,错误提示
    赋值号左边必须是变量、属性或索引器

    vc中编译能通过而且,
                int a, b;
                a = b = 1;
                b += (a / b++);
                cout<<a<<" "<<b<<endl;在vc中显示 1 3
    岂不奇怪?
      

  8.   


    每种编译器的计算都稍有区别吧
    vc上是不是b=b+(a/b++)计算时=号右边第一个b的值取的是b++后的值为2就成了b=2+1了
      

  9.   

    分解一下static void Main(string[] args)
            {
                int a, b; //a=0,b=0
                a = b = 1; // a=1,b=1
                b = (a / b++); //a=1 ,b=1
                b =b + 1; //b =2
                Console.WriteLine("{0},{1}",a,b);
            }
    其中这句 b =(a/b++)的过程为b++ //当前值为1 ,同时在栈中另一个寄存器生成 临时值2供下次使用;
    a/b //用的是当前值 1;
    b= a/b // a=1,b=1,所以商为1 ,结果赋给b,同时 临时值 2 销毁;
    b=b+ 1 // b自加 ,步长 为1 ,结果 为 2;
      

  10.   


    每种编译器策略不同,但 C# 和 Java应该是一样的.
      

  11.   

    本题的关键是理解b++ 和++b的区别:b++ 是先取b的值进行计算然后b的值再加1;++b是b的值先加1再进行运算。
    这题的关键是两个句子:
    a = b = 1; 
    b += (a / b++);
    当执行完 (a = b = 1;)后 a和b的值都为1;
    (b += (a / b++);)相当于b= b+(a / b++),
    这一句的a没有改变,a的值依然为1,第一个b的值为1,赋值语句最右的(b++)先取b=1进行式子的计算,
    所以最后b=1+(1/1)=1+1;
    所以a=1 b=2; 
      

  12.   

    b += (a / b++)可以写成b=b+(a/b++),这样,b=1+(1/1)=1+1=2.
    如果是b += (a / ++b),b=b+(a/++b)=1+(1/2)=1+0=1输出结果就是1,1了.
    其实这里就是考是累加后参考运算还是运算后值累加而已
      

  13.   

    a+=2先运算后赋值
    a=+2先赋值后运算
    ++a先运算后赋值
    a++先赋值后运算