【发布时间】:2009-04-03 18:00:22
【问题描述】:
我尝试构建一个大的 Int64,其中包含以字节为单位的半字节信息。
以下代码行按预期工作:
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x100000000));
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x1000000));
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x100000));
为什么下面这行会导致编译错误CS0220“The operation overflows at compile time in checked mode”而其他的不会?
Console.WriteLine("{0:X12}", (Int64)(0x0d * 0x10000000));
结果是:
FFFFFFFFD0000000
代替:
0000D0000000
谁能解释一下?我现在将使用移位运算符进行转换,但仍然很好奇为什么这种方法不起作用!
更新:使用 (Int64)(0x0d
【问题讨论】:
标签: c# compiler-construction overflow