long longValue=Int64.MaxValue;
int intValue=(int)longValue;
转换后,intValue的值为-1,为何?

解决方案 »

  1.   

    Int64 值类型表示值介于 -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807 之间的整数。
    Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数。
    超出范围
      

  2.   

    我忘记了数据在pc内部用补码表示。
    Int64.MaxValue在计算机内部表示为011……11(补码,63个1)
    溢出后,剩余部分为11……11(补码,共32个1,第一位为符号)
    换算为原码为 100……001,中间30个0,即-1。
    应该是这样吧