今天做这题发现一个意想不到的问题记录一下

 

这题主要点在于移位运算,a 除以b  ,把b向左移位, 使b变大,但又不能超过a,

如下 

while (a>b) b<<=1;

等循环跳出后,b已经比a大了,所以要把b还原一下, b>>=1;  

但是!!! 这样是不行的!! 首先,一旦移位把int变为负数后,再怎么移都不会变为正数

 

举例

a = 1610612736;
a <<= 1;
a >>= 1;

你认为答案是多少?   答案是536870912

但是你用Windows计算器来做这个实验又会得到1610612736, 这里就是比较坑爹的地方了。

代码里面移位是严格按照移位来的,移位保证符号位不变;计算器则会严格移动位,不管符号位!

因为这个事情造成本题浪费大量时间, 好吧 做位运算的时候不要拿计算器验证。。 以免误导