2011-01-19 81 views
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變量。

+0

我沒有投票決定關閉爲重複,但這是顯著類似http://stackoverflow.com/questions/941584 – 2011-01-19 14:39:58

+0

或許我應該解釋爲什麼我沒有找到答案到關於增加相關的現有問題。 此外,還有溢出的可能性,就像分配test2一樣。我瞭解這些情況。然而,在我所概述的兩種情況下,不存在溢出的可能性。 – 2011-01-19 14:50:13

回答