一周学会 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 是不检查是否溢出。