我意识到,如果我有一个“byte”类型的字段或变量,我可以对其应用按位 NOT(~) 并将其转换为字节。但是,如果该字段是“const byte”,我仍然可以应用按位 NOT(~),但无法将其转换为字节。例如,
这编译:
class Program
{
byte b = 7;
void Method()
{
byte bb = (byte) ~b;
}
}
但这有一个编译错误(“常量值'-8'无法转换为'字节'”):
class Program
{
const byte b = 7;
void Method()
{
byte bb = (byte) ~b;
}
}
我想知道为什么?
因为~
运算符仅预定义为int
, uint
, long
, and ulong
。您的第一个示例隐式转换b
to an int
,执行否定,然后显式转换回字节。
在第二个例子中,b
是一个常量,因此编译器也会内联否定,有效地生成一个常量int
值为 -8(7 的有符号补码)。并且由于恒定的负值不能转换为byte
(不添加unchecked
context),你会得到一个编译错误。
为了避免错误,只需将结果存储在非常量中int
多变的:
const byte b = 7;
void Main()
{
int i = ~b;
byte bb = (byte)i;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)