一周学会C#(值的类型二)
C#才鸟(QQ:249178521)
4.连接
· 规则1
w 除了赋值操作符外的其他二元操作符都是左连接的。
x+y+z 应理解为 (x+y)+z
· 规则2
w 赋值操作符和?: 操作符是右连接的。
x=y=z 应理解为 x=(y=z)
x+=y+=z 应理解为 x+=(y+=z)
a?b:c?d:e 应理解为 a?b:(c?d:e)
5.计算时的顺序
· 操作数是严格地从左到右被计算的。
int m = 2;
int answer = ++m * ++m + ++m * ++m;
计算的顺序:
3 * ++m + ++m * ++m
3 * 4 + ++m * ++m
12 + ++m * ++m
12 + 5 * ++m
12 + 5 * 6
12 + 30
42
6.整数溢出
· 溢出错误
w un/checked ( 表达式 )
w un/checked{语句 }
int m = ...
Method(checked(m * 2));
m = checked(m * 2);
checked
{
Method(m * 2);
m *= 2;
}
以上的每一句语句都进行溢出错误检查
Method(m * 2);
m *= 2;
以上的每一句语句在用csc /checked+ *.cs编译时,进行溢出错误检查
以上的每一句语句在用csc /checked- *.cs编译时,不进行溢出错误检查
Method(unchecked(m * 2));
m = unchecked(m * 2);
unchecked
{
Method(m * 2);
m *= 2;
}
以上的每一句语句都不进行溢出错误检查
checked(表达式)检查一个表达式的结果是否溢出。它可以用于任何一个表达式,但只只能对整数操作符起作用,因为只有这些操作符才产生溢出。这些操作符是:++, --, -(负号),+ -(减号), * ,/ ,%以及整型之间的显式类型转换符。checked(表达式)的结果也是一个表达式,它可以被用来作为另一个表达式的一部分:
int outcome = checked( ... );
checked{语句}检查一系列的语句结果是否溢出。它不是一个表达式,没有结果。例如,下面有语句会产生错误:
int noOutcome = checked { ... };
(注意:checked(表达式)的括号是园括号,而checked{语句}的括号是花括号)。
unchecked是不检查是否溢出。