c# - 字节类型的负值

标签 c#

我刚开始在 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/

相关文章:

c# - List<> 在 ToArray() 期间丢失的项目?

c# - Xamarin ios 我想自动从 UIPickerView 获取第一行而不选择

c# - 在 WPF 中为 DataGridRow 创建 ControlTemplate

c# - 字节数组未初始化为正确的大小?

c# - BindingList 与我的类使用它的属性填充 ComboBox?

c# - 尝试使用 DataBindCrossTable 方法显示折线图总是出现条形图

c# - 递归调用函数并不总是可能的

c# - 如何在windows窗体中开发类似 "outlook 2007 send/receive progress"对话框的窗体?

c# - 如何生成 .pfx 文件?

c# - 如何根据复选框状态更改列表框选择,反之亦然?