三、C# 运算符和控制流

通常运算符划分为3大类:
一元运算符、二元运算会、三元运算符,它们对应的操作数分别是1个、2个、3 个。
结合性和优先级顺序。
二元运算会是从左向右结合的,相反赋值运算符是从右向左结合的。
 
char类型存储的是字符而不是数字,但它是一个整型。
 
1、浮点型的特殊性
 
float和double有一些特殊性,
一个float具有7位精度。只能有7位精度的有效数字。其它会被截断。存在舍入误差。
 
 
浮点类型造成非预期的不相等
比较两个值是否相等的时候,浮点类型的不准确性可能造成非常严重的后果。有的时候,本来
应该相等的值被错误地判断为不相等。
 
2、递增和递减运算符
 
运算符的位置决定了所赋的值是操作数计算之前还是之后的值。
运算符采用后缀还是前缀形式,影响的只是在递增之前还是之后进行赋值,被影响的变量永远会改变。
 
线程安全的递增和递减
虽然递增和递减运算符简化了代码,但是两者执行的都不是原子级别的运算。
在运算符执行期间,可能发生线程上下文切换,并可能造成一个竞争条件。
 
 
3、常量表达式
const int a=60*60*24;
根据定义,常量表达式是C#编译器在编译时完成求值的表达式(而不是在程序运行时才能求值)
 
 
4、作用域和声明空间
作用域(scope)和声明空间(declaration space)是指由一个代码块限定的层次化上下文。
作用域是一个特定的源代码区域,在这个区域中,使用一个项目的未限定名称来引用它
完全合法,因为名称是引用是唯一的,是无歧义的。
在一个区域中,如果声明的名称具有唯一性,这个空间就是声明空间。
 
使用域限制了可访问性。
 
5、逻辑布尔运算符
OR运算符   ||                 两者一为true,返回true
AND运算符  &&            两者皆为true,返回true
XOR运算符    ^               两者只能有一为true,返回true
逻辑求反运算符    !        取反
 
6、条件运算符
    ?     :
 
7、空接合运算符
 
从C#2.0开始,执行空值检查的条件运算符有了一个简化语法,称为空接合运算符,
它检查一个表达式是否为null;如果为null,就返回第二个表达式。或者返回第一个表达式
expression1??expression2;
 
 
3.6、按位运算符
 
位和字节
计算机的所有值都表示成1和0的二进制格式。这些1和0为位或者比特bit。
8位分成一组,称为字节(byte)。
在每一个连续的位都对应于2的一个乖幂。
 
1、移位运算符
如:
1>>2
1<<2
 
左移:移位后在右边留下空位将由0来填充
右移:左边的空位,正数由0补,负数由1补
 
2、按位运算符
 
&  与
|    或
^    异或
~    取反
 
 
3.9 C#预处理器指令
 
C#预处理哭指令是在在编译时调用的。
预处理器指令告诉C#编译器要编译哪些代码,并指出如何处理特定的错误和警告。
 
每一个预处理器指令都以一个#开头,而且必须在一行中写完。换行符,标志着预处理
器指令的结束,不是分号。
在网上找记录下来。
弄清附录B的井字棋彻底搞清楚。
 
 
上一篇:Singal Page App:使用Knockout和RequireJS创建高度模块化的单页应用引擎


下一篇:Android Studio 封装的类的继承