6
short BitwiseTest(short value)
{
short test1 = ((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return (test1 | test2);
}
上面的代碼應該是一個(低效率)的例子,在C#中交換一個簡短的(有符號的16位整數)的字節序。C#按位操作短褲 - 爲什麼投射到一個int?
然而上面的代碼不能編譯,因爲C#被隱式地從短轉換成一整型在兩個下列行:
第一種情況:
short test1 = ((value >> 8) & 0xFF);
第二種情況:
return (test1 | test2);
這是爲什麼投正在發生?我是否會簡單地回到預期的結果?像這樣:
short BitwiseTest2(short value)
{
short test1 = (short)((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return ((short)(test1 | test2));
}
如果不是爲什麼不呢?
請注意,我明白爲什麼C#在執行左移位時將短整型轉換爲整數,因此分配了test2變量。
我沒有投票決定關閉爲重複,但這是顯著類似http://stackoverflow.com/questions/941584 – 2011-01-19 14:39:58
或許我應該解釋爲什麼我沒有找到答案到關於增加相關的現有問題。 此外,還有溢出的可能性,就像分配test2一樣。我瞭解這些情況。然而,在我所概述的兩種情況下,不存在溢出的可能性。 – 2011-01-19 14:50:13