c#基础之操作符和控制流

1.1前后缀递增操作符

   int x = 123;

            int a = x++;//a=123,但是x变成了124.

            int b = ++x;//b=125

如上述代码,无论是前缀操作符还是后缀操作符,最终都会给x递增加1,但是在赋值的时候,前缀操作符是先加一再赋值,后缀操作符是先赋值再加一。

1.2

算术运算符:+ - * /%

关系运算符: 

== != > >= < <=

逻辑运算符:

&& 与,||或,!非,XOR(^)

&&和||是双操作数,!是单操作数

1.3 逻辑求反操作符! 

 它的作用可以反转一个bool数据类型的值

eg:bool  v=false;  bool  t=!v;//t=true

XOR(^)是异或操作符,如果用于两个布尔操作数,只有在2个操作数中仅有一个为true的情况下才返回true,其他情况下都是false。

1.4 条件操作符(三元操作符)

a>b?a:b

1.5空接合操作符??

  表示如果这个值为空,就使用另一个值,注意,只适合于null值,不适合空字符串。

      string e = null;
            //e=12。e为null,则e的值为12
            e= e ?? "12";


            string s = string.Empty;
            //s=string.Empty;因为??只用于空值null
            s = s ?? "12";

1.6null操作符   (?.)--------注意,这是c#6.0及以后的版本中因纳入的。

null操作符在调用方法或属性之前检查操作数是否为null,类似于   args!=null?(int?)args.Length:null。

比如:args?.ToLower();如果args为null,表达式就短路,不进行后面的执行。

1.7按位操作符

1.7.1

位:计算机的所有值都表示成1和0的二进制格式,这些1和0称为位或者比特(bit) 

字节(byte):1byte=8bit。1字节等于8位。

1.7.2 移位操作符

如果是32位机器的话,在内存里面的存储形式就是这样的:
其中0x表示16进制,f在16进制中就表示十进制数15,这样0xffffff就表示一个16进制的数fffffff,
例如:
      0xf就表示16进制的f,也就是10进制的15.
      0xff就表示16进制的ff,也就是10进制的(15*16+15)

比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为:

00000000 00000000 00000000 00000101

5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。

现在想知道,-5在计算机中如何表示?

在计算机中,负数以其正值的补码形式表达

什么叫补码呢?这得从原码,反码说起。

原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

比如 00000000 00000000 00000000 00000101 是 5的 原码。

反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。

称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。

反码是相互的,所以也可称:

11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。

补码:反码加1称为补码。

也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。

那么,补码为:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。

再举一例,我们来看整数-7在计算机中如何表示。

假设这也是一个int类型,那么:

1、先取1的原码:00000000 00000000 00000000 00000111

2、得反码:     11111111 11111111 11111111 11111000

3、得补码:     1111(F)  1111(F)  1111(F)   1111(F)  1111(F)  1111(F)  1111(F)   1001(9)

可见,-7在计算机里用二进制表达就是1对应补码的二进制表示。16进制为:0xFFFFF9。

注意:正数:原码=反码=补码。计算机中得二进制位都是以有符号数的补码形式存储的,按字节存储,8位代表一个字节 。

二进制的加法规则是“逢二进一”

二进制中的表数范围是怎么得来的?
 无符号是0-255;
 有符号是-128-127;为什么是这样的范围?

       8位二进制码有2^8=256个状态.如果用来表示无符号数,就可以表示0~255恰好256个二进制数;而如果表示带符号数,则最高位就是符号位,0表示"+",1表示"-",剩下的7位用来表示绝对(采用补码形式).0用"+0"表示,正数为+1~+127,负数为-1~-127,剩下一个"-0"则用来表示-128(在数学中,0是没有正负的),所以,带符号数的表示范围就成了-128~+127了。

在了解上面内容之后, 使用右移位操作符

int x;

x=(-7>>2);//-2.

左移位的时候,移位后在右边留下的空位由零填充。

右移位的时候,如果是负数,左侧填充1,正数则填充0.

猜你喜欢

转载自www.cnblogs.com/anjingdian/p/11312899.html