请考虑以下代码:
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,值太大或太小。
答案 0 :(得分:8)
因为long.MaxValue
是二进制0111111 .... 1111;这里的转换基本上是将它切换到最后一个(最不重要的)32位 - 所有这些都是1;和二进制111 ... 111是:-1
默认情况下,C#中的整数运算为unchecked
。添加checked
,或者将编译器更改为默认情况下进行检查,它将出错