long lb = 11691846000000000 + 8 * 36000000000;//这句运行正常
但是如果写成 long la = (1169184600 + 8 * 3600) * 10000000 ;//这句就报错:The operation overflows at compile time in checked mode
另外请问unchecked有什么作用
我写成
unchecked
{
 long la = (1169184600 + 8 * 3600) * 10000000 ; //虽然不报错但结果不是想要得到的
}

解决方案 »

  1.   

    溢出!
    unchecked编译时忽略溢出
      

  2.   

    (1169184600 + 8 * 3600) * 10000000计算后的数值超出了long类型所能表示的最大类型,即Int64.MaxValue.而在编译是使用checked模式,所以抱错,而使用unchecked模式后,在溢出的情况下也不错抱错,而得到的数值是一个截断后的值,就如时间一样,24点之后是1点,没有25点。
      

  3.   

    那如果要做这样的计算该怎么办
    为什么使用long lb = 11691846000000000 + 8 * 36000000000; 
    可以呢