通常运算符划分为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的井字棋彻底搞清楚。