C# 本质论 第三章 操作符和控制流

时间:2022-03-02 05:35:01

操作符通常分为3大类:一元操作符(正、负)、二元操作符(加、减、乘、除、取余)和三元操作符( condition?consequence:alternative(consequence和alternative表达式类型要一致) ),它们对应的操作数分别是一个、两个和三个。

要是永远括号增加代码可读性。

要用符合格式化而不是加法操作符来拼接字符串。

可以用char类型相减求两字母距离。

float具有七位精度:

  错误代码:

float n1 = 0.987654321;

  

   正确代码

float n = 0.987654321F; Console.WriteLine(n); //Displays: 0.9876543

float n = 987654321;//不加F也可以 Console.WriteLine(n); //Displays: 9.876543E+8

  二进制浮点类型内部实际存储的是二进制分数而不是十进制分数。所以,分母不是2的整数次幂的小数无法用二进制浮点数准确表示。实际上,使用一个接近十六位float的,并且分母为2整数次幂的分数来表示。double十五位有效数字。

double n = 140.6F; Console.WriteLine(n); //Displays: 140.600006103516

避免在需要准确的十进制算术运算时使用二进制浮点类型,而使用decimal浮点型。

double n = 140.63435423524252315; Console.WriteLine(n); //Displays:140.634354235243 double n = 140.63435423524242315; Console.WriteLine(n); //Displays: 140.634354235242

所以,避免二进制浮点类型用于相等性条件式。要么判断两个值之差是否在容差范围之内,,要么使用decimal类型。

float n = 0F; Console.WriteLine(n/0); //Displays: 非数字 Console.WriteLine(0/0); //报错:被常数零除 Console.WriteLine(0.0/0); //Displays: 非数字 Console.WriteLine(-1/0); //报错:被常数零除 Console.WriteLine(-1F/0); //Displays: 负无穷大 Console.WriteLine(1F/0); //Displays: 正无穷大

复合赋值操作符:

1 char current = z; 2 int unicodeValue; 3 do 4 { 5 unicodeValue = current; 6 Console .Write("{0}={1}\t",current,unicodeValue); 7 current--; 8 } while (current>=a); 9 Console.Read();

int count = 123; int result; result = count++; Console .Write("{0}\t{1}",result,count); Console.ReadLine(); //123 124

int count = 123; int result; result = ++count; Console .Write("{0}\t{1}",result,count); Console.ReadLine(); //124 124

前缀操作符的结果是变量递增递减之后的值,而后缀操作符的结果是变量递增递减之前的值。

  不要用常量表示将来可能变化的任何值。 

空接合操作符(??)如果之前都是null,则表示最后一个表达式。

x ?? y ?? z;

 不要将移位操作符用作乘除法。

按位逻辑操作符:& | ^   不进行“短路求值”:& |

按位赋值操作符:&= |= ^=

取反操作符(~)

控制流:

do/while类似于while循环,区别在于它至少会循环一次。

foreach循环:

foreach(type variable in collection) statement

不要使用continue作为跳转语句退出switch小节。

跳转语句:break。

预处理指令:在编译时调用