以前没注意过这个问题,今天写leetcode的时候提交代码总报错,后来才发现了这个问题。
int x = -2147483647;
long long t;
// 这句话会报错
t = x * -1;
// 改成这样就好了
t = x;
t *= -1;
所以,真正的运算顺序是x先乘-1,把值赋给x,再把x的值赋给t。
但是x是int型的,x乘-1就超出上限,所以报错。
以前没注意过这个问题,今天写leetcode的时候提交代码总报错,后来才发现了这个问题。
int x = -2147483647;
long long t;
// 这句话会报错
t = x * -1;
// 改成这样就好了
t = x;
t *= -1;
所以,真正的运算顺序是x先乘-1,把值赋给x,再把x的值赋给t。
但是x是int型的,x乘-1就超出上限,所以报错。