Beginning C# Objects从概念到代码——1.9 C#表达式

简单的C#表达式有以下数种。

l      常量:7false

l      char(字符)引文:‘A’,‘&

l      string引文:“foo

l      某种我们讨论过的预定义类型的变量名:myStringx

l      C#二元操作符(本章稍后详述)连接的两个上述项:x+2

l      使用C#一元操作符(本章稍后详述)修改的一个上述项:i++

l      用括号包围的上述简单表达式:x+2

再加上我们在第13章将学到的其他一些表达式类型。

1.9.1  赋值语句

给变量赋值的操作,由赋值操作符=完成。一个赋值语句由放置在=左边的(已声明的)变量名,和=右边的能计算出类型合适的值的表达式组成。例如:

  int count = 1;

 

  total = total + 4.0; // 假定total被声明为双精度类型变量

 

  price = cost + (a + b)/length; // 假定已正确声明所有变量

1.9.2  算术操作符

C#语言提供以下几种基本算术操作符:

   相加

   相减

      相乘

      相除

   求模(%左边算子除以右边算子的余数)

+和-也可作为前缀,表示正数或负数:-3.7, 42

除了简单赋值操作符=之外,还有一些特殊的组合赋值操作符,它们对变量进行组合赋值。用于算术操作的组合赋值操作符如下所列:

= a += b 相当于 a = a + b.

= a -= b 相当于 a = a - b.

=   a *= b 相当于 a = a * b.

=   a /= b 相当于 a = a / b.

= a %= b 相当于 a = a % b.

组合赋值操作符并未增加新的功能;它们只为简化代码而存在。例如,

  total=total+4.0

就可以被替代为

  total += 4.0

最后要介绍两个算术操作符,递增(++)递减(――)操作符,它们用于给整形变量加1或减1,或者给浮点型变量加1或减1。递增和递减操作符也可用于char变量。例如,考虑以下代码片段:

  char c = 'e';

  c++;

以上代码片段被执行时,变量c将被赋以值f,因为fUnicode字符系列中e后面的字符。

递增和递减操作符可用作前缀后缀。

如果操作符被放在被操作的变量前面(前缀),则递增或递减操作将发生于该语句中所有赋值操作之前。

如果操作符被放在被操作的变量后面(后缀),则递增或递减操作将发生于该语句中所有赋值操作之后。

例如,考虑以下代码片段,它使用了前缀递增(++)操作符:

  int a = 1;

  int b = ++a; // a的值将增加到2然后b被赋值2

两行代码都被执行后,变量a的值将是2,变量b的值也是。这是因为,在第二行代码中,对变量a的递增操作(从12)在a的值被赋给b之前发生。以上两行代码在逻辑上等同于下面三行代码:

  int a = 1;

  a = a + 1;

  int b = a;

现在看看递增操作符在同一段代码中用作后缀的情况:

  int a = 1;

  int b = a++; // b将被赋值为1然后a递增到2

在两行代码都被执行后,变量b的值将是1,而变量a的值则是2。这是因为,在第二行代码中,对变量a的递增操作(从12)发生于给b赋予变量a的旧值之后。上面两行代码逻辑上等同于下面三行代码:

  int a = 1;

  int b = a;

  a = a + 1;

下面是稍为复杂一些的例子:

  int y = 1;

  int z = 2;

  int x = y++ * ++z; // x将被赋值为3因为z的值在相乘之前

                         // 已经递增到3y的值在被使用前保持为1

如你稍后将见到的那样,递增和递减操作符常在循环和其他流程控制结构中使用。

1.9.3  求值表达式和操作符优先顺序

可以通过嵌套的括号来构造任意复杂的表达式,例如,((((4/x)+y)*7)+z)。编译器从内到外、从左到右计算逐对括号内的表达式。假定xyz已经被声明和初始化:

  int x = 1;

  int y = 2;

  int z = 3;

则下面赋值语句右边的表达式:

  int answer = ((8 * (y + z)) + y) * x;

将被渐次求值如下:

((8 * (y + z)) + y) * x

((8 * 5) + y) * x

(40 + y) * x

42 * x

42

如果没有括号,则有些操作符在被用于表达式求值时将获得较高执行优先权。例如,乘或除操作默认地先于加或减操作。操作符的自动优先权可通过使用括号显式地修改;括号内操作将先于括号外操作。考虑以下代码片段:

  int j = 2 + 3 * 4; // j将被赋值14

  int k = (2 + 3) * 4; // k将被赋值20

在第一行代码中,没有使用括号,乘法操作先于加法操作被执行,所以表达式求值结果为2+12=14;相当于显式地书写了“2+(3*4)”。

在第二行代码中,括号被显式地用来包围操作“2+3,加法操作会首先被执行,其结果与4相乘,最后表达式求值为5*4=20

1.9.4  逻辑操作符

逻辑操作符以特定方式比较两个(简单的或复杂的)表达式exp1exp2,求得一个可能为truefalse的布尔值。

要创建逻辑表达式,C#提供了以下关系操作符(relational operator)

exp1 == exp2    如果exp1等于exp2则为true(使用两个等于号)

exp1 > exp2    如果exp1大于exp2则为true

exp1 >= exp2    如果exp1大于或等于exp2则为true

exp1 < exp2    如果exp1小于exp2则为true

exp1 <= exp2    如果exp1小于或等于exp2则为true

exp1 != exp2    如果exp1不等于exp2则为true (!读作“不”)

!exp    如果expfalse则为true,如果exptrue则为false

除了这些关系操作符,C#还提供了用于组合关系操作符,并创建包括多次比较的复杂逻辑表达式的逻辑操作符

&&    逻辑“与”

||    逻辑“或”

!    逻辑“非”(!操作符使逻辑表达式的值从truefalse或相反)

逻辑“与”和“非”操作符是二元操作符;其左右两边的算子都必须是有效的逻辑表达式,这样才能计算得到布尔值。如果使用了&&操作符,左右两边的算子均应为true才能算得true。至于||操作符,则只要其中一个为true,结果就是true

下例使用逻辑“与”操作符编写代码,表现“如果x大于2.0y不等于4.0

  if (x > 2.0 && y != 4.0) {

      // 伪代码

      do some stuff……

  }

注意,因为>!=操作符较&&操作符有更高优先级,我们无需像这样塞入括号:

  if ((x > 2.0) && (y != 4.0)) {

    // 伪代码

    do some stuff ……

  }

但这样做可以增强代码可读性。

逻辑表达式在控制结构流程中最为多见,本章稍后将谈及这个话题。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值