请高手分析一下红色的代码为什么这样写:
public static String signedToBinary(int n)
{
if(n==0)return null;
if(n>0)return 0+Integer.toBinaryString(n);
int mod = 1;
while(mod+2*n<0)
{
mod*= 2;
}

return Integer.toBinaryString(mod+n);
}

解决方案 »

  1.   

    应该是当n为负数的时候,mod保证第一位为1,得出的结果才会为负吧!(粗略的看了一下,这样想的,可以借鉴一下吧!)
      

  2.   

    很奇怪的代码
    我们假设一下n=-15
    那mod+2*n<0 -> mod<-2n -> mod < 30
    这样mod >=30 就可以跳出循环,又因为mod = 2倍数
    所以 mod == 30   最后return 的是Integer.toBinaryString(mod+n);
    那就是return的是15,即n的 绝对值
    所以对于负数的情况,返回的是对应整数的绝对值的binaryString