C# 操作符

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);

}
       }

运算结果如下

时间: 2024-10-10 00:04:45

C# 操作符的相关文章

Python爬取CSDN博客文章

之前解析出问题,刚刚看到,这次仔细审查了 0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.windows下环境搭建 3.java里连接redis数据库 4.关于认证 5.redis高级功能总结1.基础底层数据结构1.1.简单动态字符串SDS定义: ...47分钟前1 url :http://blog.csdn.net/youyou1543724847/

[ Perl 6 ] 被取代的钻石操作符(&lt;&gt;)

[ Perl 6 ] 被取代的钻石操作符(<>) There is more than one way to do it. Perl 5中,如果要逐行读取一个文件的内容,你可能会写出下面的代码 while (<>) { chomp; print "It was $_ that I saw.\n"; } $ perl myscript.pl in 但是在Perl 6中,钻石操作符<>已经不再被支持,现在可以用下面的代码来完成上面的功能 for line

string 类型的输入操作符 cin 和 getline 函数分别如何处理空白字符?

string用来读取一个word : string 类型的输入操作符 cin 对空白字符的处理:读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直至再次遇到空白字符,读取终止(该空白字符仍留在输入流中). getline 函数用来读取整行文本,接受两个参数:一个输入流对象和一个 string 对象,例如 getline(cin,line): getline 函数对空白字符的处理:不忽略行开头的空白字符,读取字符直至遇到换行符,读取终止并丢弃换行符(换行符从输入流中去掉但并不存储在

构造函数、拷贝构造函数、赋值操作符

对于这样一种类与类之间的关系,我们希望为其编写“深拷贝”.两个类的定义如下: class Point { int x; int y; }; class Polygon : public Shape { Point *points; }; 1. 构造函数 //构造函数 Polygon(const Point &p) : _point(new Point) { this->_point->x = p.x; this->_point->y = p.y; } 2. 拷贝构造函数 /

php == 操作符带来的安全问题

1 比较操作符 php的比较操作符有==(等于)松散比较,===(完全等于)严格比较,这里面就会引入很多有意思的问题.在松散比较的时候,php会将他们的类型统一,比如说字符到数字,非bool类型转换成bool类型,为了避免意想不到的运行效果,应该使用严格比较.如下是php manual上的比较运算符表: 例子 名称 结果 $a == $b 等于 TRUE,如果类型转换后 $a 等于 $b. $a === $b 全等 TRUE,如果 $a 等于 $b,并且它们的类型也相同. $a != $b 不等

C++强制类型转换操作符 const_cast

const_cast也是一个强制类型转换操作符.<C++ Primer>中是这样描述它的: 1.将转换掉表达式的const性质. 2.只有使用const_cast才能将const性质性质转化掉.试图使用其他三种形式的强制转换都会导致编译时的错误.(添加const还可以用其他转换符,如static_const) 3.除了添加const或删除const特性,使用const_cast符来执行其他任何类型的转换都会引起编译错误.(volatile限定符也包括,不过我不怎么了解,本文主要说const)

linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符) (转帖)

http://wenku.baidu.com/link?url=2RsCun4Mum1SLbh-LHYZpTmGFMiEukrWAoJGKGpkiHKHeafJcx2y-HVttNMb1BqJpNdwaOpCflaajFY6k36IoCH_D82bk2ccu468uzDRXvG 基于LINQ+to+Entity数据访问技术的应用研究 Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式:

LINQ系列:Linq to Object相等操作符

相等操作符通过比较两个序列来检查它们相应的元素是否相同.如果两个序列有相同的元素,并且对应元素的值相同,则认为这两个序列是相等的. SequenceEqual操作符判定两个集合是否相等.判定是通过并行地枚举两个数据源并比较相应元素来完成的.返回值是一个Boolean值——如果两个集合相等则返回true,否则返回false. SequenceEqual 1>. 原型定义 public static bool SequenceEqual<TSource>(this IEnumerable&l

操作符(++,+,+=,小于号,(),--等)重载

 1. 操作符(++,+,+=,小于号等)重载 新建QT项目,编写头文件 #ifndef DIALOG_H #define DIALOG_H #include <QDialog> #include<QLabel> namespace Ui { class Dialog; } //编写自己的Label class myLabel { public: //一定要是共有的,才可以被调用 QLabel *ql; int cx; int cy; myLabel() { ql=new QL

关于解引用*和箭头操作符-&gt;的重载

这里以一个智能指针类为例,智能指针所指为一个对象. 而事实上,STL迭代器的开发均需要重载这两个操作符,上一篇文章分析STL 迭代器中除了要用到template技巧外,还需要重载技巧 1 #include<iostream> 2 using namespace std; 3 class Screen 4 { 5 6 public: 7 friend ostream& operator<<(ostream&os, Screen &s); 8 int actio