请高手分析一下红色的代码为什么这样写:
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);
}
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);
}
我们假设一下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