zoukankan      html  css  js  c++  java
  • 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、先取7的原码: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在计算机里用二进制表达就是7对应补码的二进制表示。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.

    1.7.2按位操作符

    比如:

      byte and, or, xor;
    
                and = 12 & 7;//and=4
    
                or = 12 | 7;//or=15
    
                xor = 12 ^ 7;//xor=11
    
                Console.WriteLine(xor);
    
                Console.ReadKey();

    这三个操作符和&&,||逻辑操作符含义不同,下面分别是12和7的二进制表示:

    12:0000 1100

    7:  0000 0111

    在执行按位AND运算的时候会逐位比较,都为1的时候才为1,所以结果是0000 0100,十进制表示为4.

    在执行按位OR运算的时候,只要有一个1,结果便是1,结果是:0000 1111,十进制表示为15.

    在执行异或运算的时候,只有2者同时存在一个0与一个1结果才是1,0000 1011,十进制表示11.

    注意:7也可以称之为掩码:作用是通过特定的操作符表达式,公开(expose)或者消除(eliminate)第一个操作数中特定的位。

    下面的代码可以获得w对应的二进制形式,2换成10,16都可以获得相应进制的形式。

      int w=12;
               string sas= Convert.ToString(w,2);//

    2.预处理指令

    2.1

    #warning   这里有警告     //这行代码会在运行时候在vs编译器中的警告页面中显示,可以很好标记出代码中潜在的bug和可以改进的地方。

    2.2 排除和包含代码

    比如某个项目是在c#1版本上 编译的,所以要排除c#2才有的代码:

    #if CSHARP2PLUS 
          
         System.Console.Clear();
    
    #endif
    System.Console.Clear();是c#2及以上版本才有的方法,只有在c#2及以上版本才能执行这段代码。
    

     预处理指令还可以处理不同平台之间的差异,比如WINDOWS和LINUX,

    #if LINUX
                LINUX执行代码
    #elif WINDOWS
                WINDOWS执行代码
    
    #endif
  • 相关阅读:
    linux中fork()函数详解(原创!!实例讲解) (转载)
    超级课程表原理解析(如何获取网页内容)
    MySql中时间类型总结
    android Json详解
    Jsoup解析Html中文文档
    Mysql相关
    Chrome驱动安装问题
    Airtest 网易 UI 自动化工具 Airtest 浅用记录
    关于Airtest的使用探索
    Sublime text 3搭建Python开发环境及常用插件安装
  • 原文地址:https://www.cnblogs.com/anjingdian/p/11312899.html
Copyright © 2011-2022 走看看