3
我剛開始在C#中掙扎,我有一個問題。字節類型的負值
在下面的代碼:
byte var = 0;
Console.WriteLine("{0}", ~var);
爲什麼它打印-1?從http://www.csharp-station.com/Tutorial/CSharp/Lesson02我讀過字節範圍是從0到255和〜(00000000)_2給出(11111111)_2等於(255)_10。
我剛開始在C#中掙扎,我有一個問題。字節類型的負值
在下面的代碼:
byte var = 0;
Console.WriteLine("{0}", ~var);
爲什麼它打印-1?從http://www.csharp-station.com/Tutorial/CSharp/Lesson02我讀過字節範圍是從0到255和〜(00000000)_2給出(11111111)_2等於(255)_10。
您正在打印的值不是byte
類型。它是類型int
。
~
(按位不)運算符未定義爲byte
,但它是用於int
。你的代碼有一個隱含的擴展轉換爲int
。您的代碼大致相當於這個版本使用顯式轉換:
int temp = ~((int)var);
Console.WriteLine("{0}", temp);
位運算符不操作反轉位給結果111....111
(基數爲2)。這在two's complement表示中具有值-1。
如果你想要得到的結果是與價值255字節,你必須添加一個明確的轉換:
byte x = 0;
byte result = (byte)~x;
+1尼斯和明確的解釋。沒有'Console.WriteLine(byte)'重載。 –
謝謝,我搜索了這個簡單解決方案的'世界'! –