c#运算符

运算符是进行某种运算的符号,运算数包含变量常量。

算数运算符

字符串运算符 唯一“+” 除了作为算数运算符外,还可以将字符串连接起来成为新的字符串。

string s = "hello";//定义一个字符串变量
s = s+"  ,world.   ";//连接字符串
Console.writeLine(s);//输出“hello,wrorld.”

赋值运算符  =

赋值运算符用来改变变量的值,赋值运算构成的表达式时赋值表达式,在赋值表达式中,结果的类型是左边变量的数据类型

int i = (int) (2.8*4);//结果为11而不是11.2

关系运算符 用来比较 attention:只能用来比较同类型的数据。

用于比较两个运算数,结果为true和非0时,对应值为1否则为0

10>5 结果为true
2>3  结果为false

关系运算符有< , <= , > , >=, == ,!= 

逻辑运算符 用于布尔值

! ,&&, ||

其中,&& 和|| 是双目运算符,要求有两个运算对象,&&的优先级更高,! 优先级更高。

位运算符

位运算符的运算对象必须为整数,位运算符有~,<<, >>,&,|,^.

设计一个控制台程序说明位运算符的应用

  static void Main(string[] args)
        {
            byte b1, b2, b3;
            b1 = 10;
            b2 = (byte)~b1;//~b1 的结果为int,需要强制转换成byte类型
            Console.WriteLine(b2);
            b3 = (byte)(b1 << 2);//b1<<b2的结果int类型,需要强制转换成byte类型
            Console.WriteLine(b3);
            b1 = 3; b2 = 6;
            b3 = (byte)(b1 & b2);//b1 &b2 的结果为int类型,需要强制转换成byte类型
            Console.WriteLine(b3);
            b3 = (byte)(b1 ^ b2);//b1^b2 的结果为int类型,需要强制转换成byte.
            Console.WriteLine(b3);
            b3 = (byte)(b1|b2);//b1|b2的结果为int类型,需要强制转换成byte类型
            Console.WriteLine(b3);

        }

在上述程序中,b1 = 10 ,对应二进制数[00001010]

按位求反,b2 = 二进制[11110101];对应十进制数245

将b1左移两位后,b3=[00101000]对应十进制数40

b1 = 3 =[00000011],b2 =6= [00000110],b1&b2 = [00000010],b1^b2=[00000101] = 5 ,b1|b2 = [00000111] = 7 

结果如下:

条件运算符

1 是三元运算符

2 格式:表达式1?表达式2:表达式3

3 计算表达式1布尔值

  若为true ----表达式2的值作为整个表达式的值

  若为false-----表达式3的值为整个表达式的值

 

max = a>b>?a:b
//若a>b  max = a;
  否则max = b ;

其他运算符

1 sizeof 运算符

用于求值类型数据在内存中占用的字节数:

sizeof(类型标识符)

其结果为一个整数,表示指定类型的数据存在内存分配的字节数,只能用于值类型和值类型变量。

 static void Main(string[] args)
        {
            Console.WriteLine("byte类型所占字节数:{0}",sizeof(byte));
        }

2 typeof 运算符

用于一个标识表达式的数据类型的字符串,例如:

Console.WriteLine(typeof(Student));

输出Student 结构类型的程序名

3 new运算符

用于创建一个类的对象

4checked 和Unchecked

checked 用于对整型算数运算和转换显式启用溢出检查

在默认情况下,如果表达式仅包含常数值,且产生的值在目标类型范围之外,则会导致编译器错误。

int i = int.MaxValue + 10 ;//int.MaxValue 为int 型的最大值
Console.WriteLine (i);
上述代码在运行时会导致编译器错误,如果表达式包含一个或多个非常数值,则编译器不检测溢出。
int n = 10 ;
int i = int.MaxValue + n ;
Console.WriteLine (i);
在运行时不检查这些非常数表达式是否溢出,这些表达式不引发溢出异常,其输出为2147483639,作为两个正整数之和。

用户可以通过编译器选项,环境配置或使用checked关键字来启用溢出检查,例如:

int n = 10 ;
Console.WriteLine(checked(int.MaxValue + n));

or

checked //checked块
{
    int n = 10 ;
    int i = int.MaxValue + n;
    Console.WriteLine(i);

}

使用checked块,在运行时检测求和计算导致的溢出,所以都会计算溢出
unchecked 用于取消整型算数运算和转换的溢出检查
 

Console.WriteLine(unchecked(int.MaxValue + 10 ));

or

unchecked 
{
   int i = int.MaxValue +10 ;
   Console.WriteLine(i);
}

它们的输出均为2147483639,若移除unchecked环境,则会发生编译错误,因为表达式的各个项都是常数,所以可以在编译时检测出溢出。

默认情况下,在编译时和运行时不检查包含非常数项的表达式。因为溢出检查比较耗时,所以当无溢出危险,不检查代码可以提高性能,若出现溢出,应该使用检查环境。

运算符优先级

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值