C#的精彩世界还离不开其提供的丰富的操作符,按照操作数的个数,C#操作符可分为以下几类:
- 一元操作符 :++x,x++,--y,z--
- 二元操作符:x+y,x-y,x*y
- 三元操作符:x=(x>a?x:a);
如果从操作符的作用来看,C#操作符可以分为赋值操作符,算术操作符,关系操作符,逻辑操作符,位操作符和其它操作符。
1.赋值操作符
赋值操作符除基本的赋值操作符“=”之外还包括以下的组合赋值操作符:
- += 如:int x; x+=5; 相当于:x=x+5;
- -= 如:int y,z=4; y-=z; 相当于:y=y-z;
- *= 如:double x,y = 2.3; x*=y;相当于:x=x*y;
- /= 如: int x,y;int a=5; y=3; x/=y+a;相当于:x=x/(y+a);
- %= 如: int y,x=12; y%=x; 相当于:y=y%x;
- >>= 如: int y=16; y>>=2;相当于:y=y>>2;
- <<= 如: int a=32; a<<=3;相当于:a=a<<3;
- ^= 如: int a=32;a^=2; 相当于:a=a^2;
要注意的是,对于复合的赋值操作符,中间不运许有空格,否则程序将会报错。
关于赋值操作符的运用下面给出一个综合的例子:
using System;
class ComOp
{
public static void Main()
{
int x=5,y=13;
x -= y+3;
Console.WriteLine("x={0}",x);
double d1 = 10.5;
int d2=2;
d1*=d2+2;
Console.WriteLine("d1={0}",d1);
int a=16;
a>>=2;
Console.WriteLine("a={0}",a);
}
}
运行结果如下:
注意:符合赋值操作符右边值的数据类型必须与左边值得数据类型相同或能够进行隐式转换,否则会出错。
2.算术操作符
C#为我们提供了5种算术操作符:
- 加法操作符(+)
- 减法操作符(-)
- 乘法操作符(*)
- 除法操作符(/)
- 求余操作符(%)
对于+,-,*,/,大家都不陌生,下面只说一说求余操作符%。
在C#中,%不仅可以对于整数求余数,对小数同样可以求余数。如 5%3=2,3.2%2=1.2,5%1.5=0.5。
下面给出一个综合例子来说一下算术操作符的用法:
using System;
class AriOp
{
static void Main()
{
int i;
i = 10/5;
Console.WriteLine("i=10/5={0}",i);
i = 13/5;
Console.WriteLine("i=13/5={0}",i);
i = 33/44;
Console.WriteLine("i=33/44={0}",i);
int a=13,b=11;
Console.WriteLine("a%b={0}",a%b);
double d1=12.3,d2=1.4;
Console.WriteLine("d1%d2={0}",d1%d2);
}
}
运算结果如下:
3.关系操作符
关系操作符,即比较操作符,是用于比较两个值大小或相等的。其结果应该是一个逻辑值“真”或“假”。C#中的的关系操作符主要有以下几种:
- == 比较等于
- != 不等于
- < 小于
- > 大于
- <= 小于等于
- >= 大于等于
在书写组合操作符时要注意,两个字符之间不允许有空格,否则系统无法识别,而出错。
对于布尔类型、引用类型和字符串类型,只能使用==和!=两个关系操作符,即无大小之分,只有是否相等和不相等之分。下面举一个例子说明其用法:
using System;
class ComOp
{
static void Main()
{
int a=23,b=19;
bool b1=false,b2=true,b3=false;
double x=7E+3,y=0.0001;
char ch=‘x‘;
Console.WriteLine("a<b+4:{0}",a<b+4);
Console.WriteLine("(b1&&b3)!=b2:{0}",(b1&&b3)==b2);
Console.WriteLine("(b1&&b2)==b3:{0}",(b1&&b2)==b3);
Console.WriteLine("x<y*1000:{0}",x<y*1000);
Console.WriteLine("ch-32==‘X‘-‘A‘+65:{0}",ch-32==‘X‘-‘A‘+65);
}
}
运行结果如下:
4.逻辑操作符
逻辑操作符用于两个布尔值之间。C#提供了3种逻辑操作符:
&& 表示逻辑“与”的关系,二元操作符;
|| 表示逻辑“或”的关系,二元操作符;
! 表示逻辑“非”的关系,一元操作符;
它们之间的运算关系可以用真值表来表示。假设,x和y是两个布尔值,它们的初始值和运算结果如下表:
x |
y |
x&&y |
x||y |
!x |
false |
false |
false |
false |
true |
flase |
true |
false |
true |
true |
true |
false |
false |
true |
fasle |
true |
true |
true |
true |
false |
下面给出一个简单的例子,测试一下逻辑操作符的使用方法:
运行结果如下:
5.条件操作符
C#中唯一的一个三元操作符为:?:,即条件操作符。他要求每一个操作数都必须是一个可以隐式转换成bool类型的表达式,其运用形式如下:
表带式1?表达式2:表达式3;
其先运算表达式1,如果表达式1的值为true,则计算表达式2,运算结果为表达式2的值;若表达式1的值为false,则运算表达式3,运算结果为表达式3的值。
下面给出一个例子:
其运算结果为:
我们也可以运用三元操作符来实现求两个值的大小:
其运行结果为:
6.位操作符
我们知道,任何信息在计算机中都是以二进制的形式保存的。位操作符就是对数据按二进制进行运算的操作符。C#语言中的位操作符有:
- & 与
- | 或
- ^ 异或
- ~ 取补
- << 左移
- >> 右移
其中,取补只有一个操作数,而其它的位操作符都有两个操作数。这些运算都不会产生溢出。位操作符的操作数为整型或者是可以转换为整型的任何其它类型。
(1)& 与操作符
&操作符的操作数按二进制进行与运算,其规则为:
0&0=0
0&1=0
1&0=0
1&1=1
即,除了两个位均为1时,与运算结果为1外,其它任何情况下与运算结果均为0。比如,3和9进行与运算:
3的二进制表示: 00000011
9的二进制表示: 00001001
与运算结果: 00000001
即,3&9的结果为1。
(2)| 或操作符
或操作符的操作数按二进制位进行或运算,其规则为:
0|0=0
0|1=1
1|0=1
1|1=1
即,除了两个位均为0时,或运算结果为0外,其它情况下或运算结果均为1。比如,3和9进行或运算:
3的二进制表示: 00000011
9的二进制表示: 00001001
或运算结果: 00001011
即,3|9的结果为11。
(3)^ 异或操作符
异或操作符的操作数按二进制位进行异或运算,其运算规则为:
0^0=0
0^1=0
1^0=0
1^1=1
可以看出,当两个位相同时,异或运算结果为0;不相同时异或运算结果为1。如3和9进行异或运算:
3的二进制表示: 00000011
9的二进制表示: 00001001
异或运算结果: 00001010
即,3^9的结果为10。
(4)~ 取补操作符
取补操作符对操作数的每一位取补,如对9取补结果为:
9的二进制表示:00001001
取补运算结果: 11110110
(5)移位操作符
左移操作将操作数按位左移,高位被丢弃,低位顺序补0。比如12的二进制为00001100,左移一位为00011000(24),左移二位为00110000(48)。
右移操作时,如果操作数x是int或long类型时,x的低位被丢弃,其它各位顺序依次右移,如果x是非负数,最高位设为零;如果x为负数,则最高位设为1。而当x为uint或ulong类型时,x的低位将被丢弃,其它各位顺序依次右移,高位设为0。
下面简单举个例子来说明以上各位操作符的用法:
using System;
class Bit
{
static void Main()
{
int a = 3,b = 9;
Console.WriteLine("a={0},b={1}",a,b);
Console.WriteLine("\n演示与操作符...");
Console.WriteLine("a&b={0}",a&b);
Console.WriteLine("\n演示或操作符...");
Console.WriteLine("a|b={0}",a|b);
Console.WriteLine("-2|2={0}",-2|2);
Console.WriteLine("\n演示异或操作符...");
Console.WriteLine("a^b={0}",a^b);
Console.WriteLine("\n演示取补操作符...");
Console.WriteLine("~a={0},~b={1}",~a,~b);
Console.WriteLine("~16={0},~-16={1},~16u={2}",~16,~-16,~16u);
Console.WriteLine("\n演示移位操作符...");
Console.WriteLine("a<<1={0},a<<2={1}",a<<1,a<<2);
Console.WriteLine("b>>1={0},b>>2={1}",b>>1,b>>2);
Console.WriteLine("a<<10={0},b>>10={1}",a<<10,b>>10);
Console.WriteLine("12u>>2={0}",12u>>2);
}
}
运算结果如下