实现方式如上。本次就以 输出整数9的二进制为例。
思路:计算出左边0的个数,然后将1001移到最高位,然后从高位到低位依次算出值(大白话:想办法把1001用程序打印出来),具体怎么实现看实现程序。
上图是32位 9的二进制,int n =Integer.numberOfLeadingZeros(num)计算出1的左边0的个数,如图我已经标注出来的28,
int x = (Integer.numberOfLeadingZeros(num)==0)?1:0;这句话的意思是最高位的左边如果不是0,非零即1,如此可推算出算出最高位的值了。
左移一位反复推算出所有的值。
实现代码:
public class OutBinary {
public static void main(String[] args) {
System.out.println(toBinaryString(1));
}
public static String toBinaryString(int num) {
if (num == 0) return ""+0;
String result = "";
// 左面0的个数
int n = Integer.numberOfLeadingZeros(num);
System.out.println("num <<= n"+(num <<= n));
for (int i=0; i<32-n; ++i) {
int x = (Integer.numberOfLeadingZeros(num) == 0)?1:0;
result += x;
num <<= 1;
}
return result;
}
}