显式转换长/小数到int

时间:2014-09-22 11:14:43

标签: c# casting int decimal long-integer

请考虑以下代码:

long longMaxValue = long.MaxValue;
decimal decimalMaxValue = decimal.MaxValue;

int a = (int)longMaxValue;
int b = (int)decimalMaxValue;

问题1:为什么将longMaxValue投射到int导致-1?

问题2:为什么将decimalMaxValue投射到int会导致以下异常,但是longMaxValue投放到int却没有?

  

对于Int32,值太大或太小。

1 个答案:

答案 0 :(得分:8)

  1. 因为long.MaxValue是二进制0111111 .... 1111;这里的转换基本上是将它切换到最后一个(最不重要的)32位 - 所有这些都是1;和二进制111 ... 111是:-1

  2. 默认情况下,C#中的整数运算为unchecked。添加checked,或者将编译器更改为默认情况下进行检查,它将出错