针对上篇文章c++的写法,改写成java的写法,测试发现有下面两种,但是现在我还不能完全理解,暂时记录,后面理解后再详细注解。
public class BaseTest {
public static void main(String[] args) {
char[] rst = ConvertTo2String(107);
System.out.println(rst);
char[] rst2 = ConvertTo2String2(107);
System.out.println(rst2);
// 100101110 == 302
// 01101011 == 107
}
public static char[] ConvertTo2String(long number) {
char[] output = new char[33];
int i = 0;
for (; i < 32; i++) {
output[i] = (char) (number & (1 << 31 - i));
output[i] = (char) (output[i] >> 31 - i);
output[i] = (output[i] == 0) ? '0' : '1';
}
output[i] = '\0';
return output;
}
public static char[] ConvertTo2String2(long number) {
char[] output = new char[33];
long tmp = 0L;
int i = 0;
for (; i < 32; i++) {
tmp = number & (1 << 31 - i);
System.out.print((1 << 31 - i) + "~");
System.out.println(tmp);
output[i] = (tmp == 0) ? '0' : '1';
}
output[i] = '\0';
return output;
}
}