一週學會C#(值的類型二)
C#才鳥(QQ:249178521)
4.連接<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
· 規則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是不檢查是否溢出。