gpt4 book ai didi

c# - C# 中的 const 字节字段按位非

转载 作者:行者123 更新时间:2023-11-30 15:28:31 25 4
gpt4 key购买 nike

我意识到,如果我有一个类型为“byte”的字段或变量,我可以对其应用按位 NOT(~) 并将其转换为 byte。但是,如果该字段是“const byte”,我仍然可以应用按位 NOT(~),但我不能将其转换为字节。例如,

编译:

class Program
{
byte b = 7;
void Method()
{
byte bb = (byte) ~b;
}
}

但这有一个编译错误(“常量值‘-8’不能转换为‘byte’”):

class Program
{
const byte b = 7;
void Method()
{
byte bb = (byte) ~b;
}
}

我想知道为什么?

最佳答案

因为 ~ 运算符只为 intuintlongulong 预定义。您的第一个示例将 b 隐式转换为 int,执行否定,然后显式转换回字节。

在第二个例子中,b 是一个常量,所以编译器也内联了否定,有效地生成了一个值为 -8 的常量 int(带符号的7) 的二进制补码。由于无法将常量负值转换为 byte(不添加 unchecked 上下文),您会遇到编译错误。

为避免错误,只需将结果存储在非常量 int 变量中:

const byte b = 7;

void Main()
{
int i = ~b;
byte bb = (byte)i;
}

关于c# - C# 中的 const 字节字段按位非,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25752380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com