ana*_*lov 4 c# int casting decimal long-integer
请考虑以下代码:
long longMaxValue = long.MaxValue;
decimal decimalMaxValue = decimal.MaxValue;
int a = (int)longMaxValue;
int b = (int)decimalMaxValue;
Run Code Online (Sandbox Code Playgroud)
问题1:为什么longMaxValue要将int结果转换为-1?
问题#2:为什么在以下异常中投射decimalMaxValue到int结果但是投射longMaxValue到int不?
对于Int32,值太大或太小.
因为long.MaxValue是二进制0111111 .... 1111; 这里的转换基本上将它切换到最后(最不重要的)32位 - 所有这些都是1; 和二进制111 ... 111是:-1
整数运算unchecked默认为C#.添加checked或更改编译器以默认检查,它将出错