我刚开始在 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;
关于c# - 字节类型的负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13856581/