C#的加法运算2007-09-10 本站 加法操作符可以用运用于整数类型、实数类型、枚举类型、字符串类型和代表类型。这是通过操作符重载实现的,我们将在第十一章讲述操作符重载的内容,这里我们只需要知道这些操作符可以对不同类型的变量进行运算就可以了。加法操作符实际上定义了以下原型用于整数和浮点数运算:int operator +(int x,int y);uint operator +(uint x,uint y);long operater +(long x,long y);ulong operator +(ulong x,ulong y);float operator +(float x,float y);double operator +(double x,double y);decimal operator +(decimal x,decimal y);我们知道,在数学运算中结果可能是正无穷大、负无穷大,也可能结果不存在。在C#中,这种情况的处理按照了国际上IEEE 754算法的规则。表7-2给出了在两个数相加时,操作数与目标类型的非零有限值、零值、无限值和NaN值(空值)的所有可能的组合。表中x和y是非零的有限值,z是“x+y”的运算结果。如果x和y数值相同,但符号相反,则z为零。如果“x+y”太小,目标类型也无法表示,则z为和“x+y”同符号的零值。表7-2
| y | +0 | -0 | +∞ | -∞ | NaN |
x | z | x | x | +∞ | -∞ | NaN |
+0 | y | +0 | +0 | +∞ | -∞ | NaN |
-0 | y | +0 | -0 | +∞ | -∞ | NaN |
+∞ | +∞ | +∞ | +∞ | +∞ | NaN | NaN |
-∞ | -∞ | -∞ | -∞ | NaN | -∞ | NaN |
NaN | NaN | NaN | NaN | NaN | NaN | NaN |
枚举型加法对于枚举类型的变量,加法操作符的原型是:E operator +(E x,U y);E operator +(U x,E y);此处E是枚举类型,U是E的基类型。该运算等价于(E)((U)x+(U)y)程序7-2演示了枚举类型的加法运算。程序清单7-2:
using System;enum Weekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};class Test{public static void Main(){Weekday day1=Weekday.Sunday;Weekday day2=Weekday.Saturday;Weekday day3=day1+6;Console.WriteLine(day1);Console.WriteLine(day2);Console.WriteLine(day3);}}
程序输出结果为:
0
6
6字符串加法对于object与string类型也可以进行加法运算,并且返回值总是string类型,这时加法操作符的原型是:string operator +(string x,string y);
string operator +(string x,string y);
string operator +(object x,string y);比如,字符串“Welcome”和“to you”相加的结果就是“Welcome to you”。代表合并加法操作符还可以作用于delegate类型的变量,这是我们称之为合并。原型为D operator +(D x,D y);其中D是一个delegate类型。式子中如果两个操作数是同一delegate类型D时,则加法操作符执行代表合并运算。如果第一个操作数为null,那么结果是第二个操作数的值。反之,如果第二个操作数为null,则结果是第一个操作数的值。