当前位置:编程学习 > C#/ASP.NET >>

c#运算的一点小问题!!望高人指点~

using System;
class A
{
  static void Main()
   {
     int i=1;
     int j=2;
     int k=3;
     bool b=--i>1&&j++<2&&k--<3;     //结果i=0,j=2,k=3;//
          b=++i>1||j--<2&&--k<3;    //结果i=1,j=1,k=3;//
          b=++i>1|j--<2&--k>3;     //结果i=2,j=0,k=2;//
      Console.WriteLine("i="+i);
      Console.WriteLine("j="+j);
      Console.WriteLine("k="+k);
    }
}
  我是刚学c#的,有一定的c++基础;由于是自学没人指点有些问题总是搞不懂,望高人指点!
  为什么上面这个程序每一个b后面会对应那样的结果?第一个b后面的j++,k--运行后j,k的值都没变?第二个b后面的--k运行后k的值也不变呢? --------------------编程问答-------------------- 因为第一个是先赋值再计算

第二个是先计算再赋值(注意第一个b运行后j,k已经赋值) --------------------编程问答-------------------- 这个问题是这样的:举个例子就明白了,比如说int i,j
i=1; 
如果j=++i;此时j为2,i为2.(过程是先将i加1,在赋值给j)
如果j=i++,此时j为1,i为2.(过程是先将i赋值给j,再将i加1)
以下就是
bool b=--i>1&&j++<2&&k--<3; // b=0>1&&2<2&&3<3,此时i=0,j=3,k=2
  b=++i>1||j--<2&&--k<3; // b=1>1&&3<2&&1<3
--------------------编程问答-------------------- i++ 先使用i,然后在+1
++i 先+1,在使用i --------------------编程问答-------------------- 找本基础的书先看看吧 --------------------编程问答-------------------- MSDN --------------------编程问答-------------------- 多谢各位~~这个赋值这些我都晓得的!因为c语言的所有基础我学了的~
比如说上面二楼那朋友说的bool b=--i>1&&j++<2&&k--<3; // b=0>1&&2<2&&3<3,此时i=0,j=3,k=2
(这是在初值i=1,j=2,k=3的情况下嘛?),不管是先赋值后用还是先用后赋值,但最后i,j,k都分别要-1,+1,+1塞~~但为啥我按上面程序运行出来却是i=0,j=2,k=3呢?那上面我那程序对应的i,j,k的值是对是错啊? --------------------编程问答-------------------- 你只要把++/--运算符的意思搞清楚,把i++/i--和++i/--i运算前后值的变化搞清楚就足够了...

工作代码中像你这么写纯粹是找抽的... --------------------编程问答-------------------- 没人愿意看到楼主这样的代码。。。
--------------------编程问答-------------------- 这个看你C++的基础啦,i++与++i,一个是加之前的i,一个是加之后的i --------------------编程问答-------------------- 楼主只要注意:i++表示先用i的当前值参与运算,然后i自增
             ++i表示i先自增,然后用自增后的值参与运算. --------------------编程问答-------------------- 考大伙数学代码 --------------------编程问答-------------------- 不支持楼主去学或者研究这样的代码,几乎没有可用性,即使你能灵活使用,但是你这样写的代码别人几乎都不愿意看,可维护性很差。
尽量用最简单、通俗易懂的代码来实现功能。 --------------------编程问答-------------------- 把C语言那本书先看看,有些基础的知识和算法应该先掌握。 --------------------编程问答-------------------- 首先你得理解   ++i和i++ , --i和i--:
             ++i是i的值先自增1再参加运算,i++是i先参加运算在自增1,
             --i和i--  也是同样的道理;
其次你要懂得逻辑运算符的使用技巧:
             &&:当前一个表达式(or 操作数)为假时,就不用在继续判断了,计算机也停止进行后面的运算
             | | :不管前一个表达式(or 操作数)是否为假,你都得继续判断后面的操作数;
              ! :既是取相反操作。
混合使用时,要注意他们的优先级别,从高到低为:! , | | , &&
还有位运算符,自己多看看吧!这些基础性的东西应该都要掌握!
--------------------编程问答--------------------  bool b=--i>1&&j++<2&&k--<3; //结果i=0,j=2,k=3;//
  b=++i>1||j--<2&&--k<3; //结果i=1,j=1,k=3;//
  b=++i>1|j--<2&--k>3; //结果i=2,j=0,k=2;//
1.b=--i>1 后因为是与运算,条件成立,后面的J++<2与K--<3 就不再运算,所以得i=0,j=2,k=3
2.++i>1为FAlse 是或运算,再看下面一条 j--<2 为false 前面为False 再做与运算时.有一条为False 条件成立,--K>3就不再做运算,
3.全运算完成.. --------------------编程问答-------------------- 1 i++是先运算后自增,++i则反子;
2 建议楼主不要这样写代码了,也包括其他人,那是早期内存容量小时的写法,不得已而为之,现代计算机硬件高度发展,完全不必要去节省那微不足道的代码空间,所以现代的编程学更注重代码的可读性。 --------------------编程问答--------------------  那完全是C语言的,晕, --------------------编程问答-------------------- 有C的基础了?晕,那还问这样的问题?
这里跟c是一样的 --------------------编程问答-------------------- 当然我说的是i++ ++i..... --------------------编程问答-------------------- 多谢了~~感谢14楼朋友的回答。现在明白了~~
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,