算出来竟然是负值!为什么啊? 谢谢!

解决方案 »

  1.   

    超过了Int 类型所允许的最大值。
      

  2.   

    这个应该是数值的默认类型造成的,
    你把运算的结果赋值给一个LONG类型的试试,应该能好用。
    在未指定类型的时候,系统取的是参加运算中长度最大的数据类型或级别最高的类型,256超过了一个字节表示的数值,所以上升到一个INT类型
    如果将它赋值一个指定的类型,那么结果就会向指定的类型会隐式转换……
      

  3.   

    long i = 256L * 256 * 256 * 256;
    在vs2005中,在checked模式下,256 * 256 * 256 * 256;是不能通过编译的。
      

  4.   

    ThreadSharp(ThreadSharp V2006)
    ---如果将它赋值一个指定的类型,那么结果就会向指定的类型会隐式转换……
    实际上是在运算完才进行赋值的,即使被赋值方有足够的宽度,如果操作数不先进行类型转换,也不能正确完成运算
      

  5.   

    谢谢大家的回复,可我试了把值赋给double型和long型还是不行啊!
    错误是: 在检查模式下,运算在编译时溢出
      

  6.   

    溢出了。256l*256*256*256即可第一个数是long型的,迫使后面的运算采用long operator*( long, long )运算。而如果不在第一个数后面加上l,则一直用int operator*( int, int )运算,即使溢出亦不会隐式类型转换,因为不存在long operator*( int, int )。即使最后扔到一个long型的变量中,也是溢出之后的事情了。即 implicit operator long( operator*( operator*( operator*( 256, 256 ), 256 ), 256 ) )