在写剑指Offer第16题,数值的整数次方时出现了一个测试用例
2.00000
-2147483648
需要做的是将-2147483648
取为2147483648
,于是就exponent = -exponent;
但是发现,该数没有变?
于是百度发现:
Integer.max_value = 01111111 111111111111111111111111 01111111
111111111111111111111111+1= 10000000 00000000 00000000 00000000
最高位是符号位为1,是负数,负数的源码是补码取反+1,刚好等于Integer.min_value
于是就出现了该数没有变。
正确的做法是,将其赋值为long类型,这样无论怎样变都没有问题。