使用此代码无法获得正确的结果。插入300作为int后,我得到44作为转换后的字节值。
我期待255,因为这是最接近300的。
Console.Write("Enter int value - ");
val1 = Convert.ToInt32(Console.ReadLine());
// converting int to byte
bval1 = (byte) val1;
Console.WriteLine("int explicit conversion");
Console.WriteLine("byte - {0}", bval1);
答案 0 :(得分:6)
单个无符号字节可以保存0到255或0x00到0xff的范围。 300大于256所以它"环绕"或者从0. 300 - 44 = 256再次开始计算,这是你的包裹。
答案 1 :(得分:6)
您刚刚经历过byte overflow。尝试使用实际上可以容纳您使用的数字的类型。
<强> [编辑] 强>
看起来C#中的转换也可以checked:
bval1 = checked ((byte) val1);
并且当值太大时有适当的例外(OverflowException
)