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 .

4

1 回答 1

6

您正在打印的值不是 type byte。它是类型int

~按位非)运算符没有为 定义byte,但它是为int。您的代码有一个隐式扩大转换为int. 您的代码大致相当于使用显式强制转换的这个版本:

int temp = ~((int)var);
Console.WriteLine("{0}", temp);

按位非运算符将位反转以给出结果111....111(以 2 为底)。这在二进制补码表示中具有值 -1 。


如果您希望结果是值为 255 的字节,则必须添加显式强制转换:

byte x = 0;
byte result = (byte)~x;
于 2012-12-13T09:22:06.343 回答