int buy = 10;int b= 430000000*buy; b的结果是:5032704而不是负数。。怪了。
溢出太多,又从负数变回正数了吧?
int i = Int32.MaxValue + 1;
因为430000000乘以10之后已经大于2^32了,相当于转了一圈又转回来了成了一个比较小的正数。把buy换成9再执行就是负数了,430000000 * 9 = 3870000000 = 0xE6AB8380,可以明显看到符号位现在是1了,先减1再取反为0x19547C80 = 424967296,也就是说buy = 9时,b应该等于-424967296,这就是一个负数了。