我刚刚开始在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。
答案 0 :(得分:6)
您要打印的值不是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;