个人觉得输出第二行和第四行是一样的原理,都是输出j++,但是为什么一个是加一之前的操作,一个是加一之后的操作呢。请各位仁兄给解答一下
using System;
class Test{
public static void Main(){
int i=1,j=1,k=1;
bool bl1;
i+=j+=k;
Console.WriteLine("i<j?j:i={0}",(i<j?j:i));
Console.WriteLine("i<j?i++:j++={0}",(i<j?i++:j++));
Console.WriteLine("i={0},j={1}",i,j);
Console.WriteLine("k+=i<j?i++:j++={0}",(k+=i<j?i++:j++));
Console.WriteLine("i={0},j={1},k={2}",i,j,k);
i=3;j=k=4;
Console.WriteLine("bl1=k>=j&&j>=i={0}",(bl1=k>=j&&j>=i));
}}

解决方案 »

  1.   

    k+=i <j?i++:j++
    这里为什么是输出k的值呢,能详细解释一下么
      

  2.   

    k+=i <j?i++:j++ 
    先看右边:i <j?i++:j++ ,这个先比较i和j,这个明白吧?如果i小于j,返回i的当前值并同时使之加1,否则返回j的当前值并使j的值加1。
    这边完了,获得i或j的值(副作用是i或j增加了1),假如是i,那么整个语句可以简化为:
    k+=i;在k上增加i的值(变化前的值),然后返回k。
      

  3.   

    给楼主一个提议
    你之所以有疑问说明你对操作符的执行顺序不太了解
    那为了减少错误 你就根据自己想要的顺序加上括号啊比如k+=i <j?i++:j++ 
    我认为你的意思是想要把K+上I以后和J进行比较吧?
    那你这样写((K+=I)<J)?I++:J++
    不就不会错了吗?管他顺序是什么 全部加上括号