《C# 本质论》 第4章 操作符和控制流程

第4章 操作父和控制流程

4.1 操作符

初学者主题:操作符

操作符对称为操作数的值(或变量)执行数学或逻辑运算或操作来生成新值(称为结果)。

int difference=4-2

通常将操作符划分为三大类:一元、二元和三元,分别对应着需要一个、两个和三个操作数的操作符。此外,有些操作符以符号的形式呈现,例如+、-、?.或者??等,而另一些操作符则为关键词,例如 default和is

4.1.1 一元正负操作符

有时需要改变数值的正负号。这时一元负操作符(-)就能派上用场。

decimal debt=2643214214144.80M

使用一元负操作符等价于从零减去操作数。一元正操作符(+)对值几乎[2]没有影响。它在C#语言中是多余的,只是出于对称性的考虑才加进来。

4.1.2 二元算术操作符

二元操作符要求两个操作数。C#为二元操作符使用中缀记号法:操作符在左右操作数之间。除赋值之外的每个二元操作符的结果必须以某种方式使用(例如作为另一个表达式的操作数)。

int a=10;
int b=2;
a=a/b;

1.*、/和%具有最高优先级。

2.+和-具有较低优先级。

3.=在6个操作符中优先级最低。

将加法操作符用于字符串

string a="Lo";
string b="ve";
Console.WriteLine(a+b);

在算术运算中使用字符

,虽然char类型存储的是字符而不是数字,但它是 “整数的类型”(意味着基于整数)。可以和其他整型一起参与算术运算。但不是基于存储的字符来解释char类型的值,而是基于它的基础值。

int n='3'+'4';
char c=(char)n;
Console.WriteLine(c);

结果是:abcdefg 第7位数是g.

g

可利用char类型的这个特点判断两个字符相距多远。

浮点类型的特殊性

浮点类型float和double有一些特殊性,比如它们处理精度的方式。float具有7位精度,能容纳值1 234 567和值0.123 456 7。但这两个float值相加的结果会被取整为1 234 567,因为小数部分超过了float能容纳的7位有效数字。这种类型的取整有时是致命的,尤其是在执行重复性计算或检查相等性的时候(参见稍后的“高级主题:浮点类型造成非预期的不相等”)。

二进制浮点类型内部存储二进制分数而不是十进制分数。所以一次简单的赋值就可能引发精度问题,例如double number=140.6F。140.6的准确值是分数703/5,但分母不是2的整数次幂,所以无法用二进制浮点数准确表示。实际分母是用float的16位有效数字能表示的最接近的一个值。由于double能容纳比float更精确的值,所以C#编译器实际将该表达式求值为double number=140.600006103516,这是最接近140.6F的二进制分数,但表示成double比140.6稍大。

设计规范

•避免在需要准确的十进制小数算术运算时使用二进制浮点类型(double),应使用十进制(decimal)浮点类型。

高级主体:浮点类型造成非预期不相等

比较两个值是否相等,浮点类型的不准确性可能造成严重后果。有时本应相等的值被错误地判断为不相等,

设计规范

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

4.1.3 复合赋值操作符

int x=123;
x=x+2;

等价于:

int x=123;
 x+=2;

其他复合赋值操作符:

x-=2;
x/=2;
x*=2;
x%=2;

4.1.4 递增和递减操作符

int x;
x++;
int y;
y--;

4.1.5 常量表达式和常量符号

第3章讨论了字面值,或者说直接嵌入代码的值。可用操作符将多个字面值合并到常量表达式中。根据定义,常量表达式是C#编译器能在编译时求值的表达式(而不是在运行时才能求值),因为其完全由常量操作数构成。然后,可用常量表达式初始化常量符号,从而为常量值分配名称(类似于局部变量为存储位置分配名称)。例如,可用常量表达式计算一天中的秒数,结果赋给一个常量符号,并在其他表达式中使用该符号。

由于常量和“变量”相反(“常”意味着“不可变”),以后在代码中任何修改它的企图都会造成编译时错误。

public long Main()
{
    const int secondsPerDay=60*60*24;//常量表达式
    const int secondsPerWeek=secondsPerDay*7;
}

设计规范

不要用常量表示将来可能改变的任何值。π和金原子的质子数是常量。金价、公司名和程序版本号则应该是变量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值