有人可以解释将值转换为字节时发生的情况,如果它超出了最小/最大字节的范围吗?它似乎是取整数值并将其与 255 取模。我试图理解为什么这不会引发异常的原因。
int i = 5000;
byte b = (byte)i;
Console.WriteLine(b); // outputs 136
有人可以解释将值转换为字节时发生的情况,如果它超出了最小/最大字节的范围吗?它似乎是取整数值并将其与 255 取模。我试图理解为什么这不会引发异常的原因。
int i = 5000;
byte b = (byte)i;
Console.WriteLine(b); // outputs 136
正在发生的事情是系统正在丢弃最高有效字节以使其适合。查看这个 StackOverFlow 答案,了解正在发生的事情的一个很好的解释。
我试图了解为什么这不会引发异常的原因。
因为溢出检查的默认设置是off。
试试这个,它会抛出:
checked
{
int i = 5000;
byte b = (byte)i;
Console.WriteLine(b);
}
简短的形式是:
int i = 5000;
byte b = checked ( (byte)i );
Console.WriteLine(b);
你得到5000%256 = 136
,像往常一样充满。
MSDN 中也对此进行了说明。如果发生溢出,使用checked()抛出异常。另请阅读: MSDN:第 5 章:关于变量的更多信息