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