博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#基础之操作符和控制流
阅读量:5273 次
发布时间:2019-06-14

本文共 3569 字,大约阅读时间需要 11 分钟。

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

 

转载于:https://www.cnblogs.com/anjingdian/p/11312899.html

你可能感兴趣的文章
Web设计的十大错误
查看>>
React总结
查看>>
BSP:bootstrap导航栏:navbar,navbar-default,collapse
查看>>
【洛谷2304_LOJ2134】[NOI2015]小园丁与老司机(动态规划_网络流)
查看>>
linux下清除tomcat缓存
查看>>
WPF自定义仪表盘控件
查看>>
WPF绘制折线
查看>>
VS2017MVC+EF+MySQL环境搭建
查看>>
利用OpacityMask制作打洞效果
查看>>
visualsvn server 提交修改日志
查看>>
WPF 自定义键盘焦点样式(FocusVisualStyle)
查看>>
使用Data Annotations进行手动数据验证
查看>>
WebSocket和Socket
查看>>
x名称空间中的内容
查看>>
【ASP.NET Core】浅说目录浏览
查看>>
用树莓派做一个离线下载机
查看>>
C#GUID
查看>>
采用Opserver来监控你的ASP.NET项目系列(一、Opserver监控的简介与平台搭建)
查看>>
酒店门锁接口说明
查看>>
android 向SD卡写入数据
查看>>