我尝试构建一个大的 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 << 28) 时也会出现该错误。