今天我了解到下面的代码是非法的,因为res2最终是一个长的.
public void test(int intVal1, int intVal2, uint uintVal)
{
int res1 = intVal1 * intVal2;
int res2 = intVal1 * uintVal;
}
见下面的屏幕截图,显示使用long.operator *
进行乘法,大概是因为uint的正值范围比int所能表示的范围更大.这有点道理,但是两个带符号的整数的乘法也很容易溢出,所以为什么要对uint额外苛刻呢?
我从C#一开始就一直在编写它,所以我很惊讶现在就遇到了它.当涉及到一个单位而不是两个整数时,有充分的理由晋升为多头吗?