显式转换长/小数到int

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:为什么在以下异常中投射decimalMaxValueint结果但是投射longMaxValueint不?

对于Int32,值太大或太小.

Mar*_*ell 8

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

  2. 整数运算unchecked默认为C#.添加checked或更改编译器以默认检查,它将出错