我刚刚开始在 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 .
您正在打印的值不是 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;