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

操作符通常分为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。

 

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

#region

#endregion

 

posted @ 2017-01-06 11:09  欢崽  阅读(242)  评论(0编辑  收藏  举报