public class BitTest {
static void binaryPrint (int q) {
if(q == 0) System.out.print(0);
else {
int nlz = Integer.numberOfLeadingZeros(q);
q <<= nlz;
for(int p = 0; p < 32 - nlz; p++) {
int n = (Integer.numberOfLeadingZeros(q) == 0) ? 1 : 0;
System.out.print(n);
q <<= 1;
}
}
System.out.println("");
}
api解釋
numberOfLeadingZeros
public static int numberOfLeadingZeros(int i)
在指定 int 值的二進制補碼表示形式中最高位(最左邊)的 1 位之前,返回零位的數量。如果指定值在其二進制補碼表示形式中不存在 1 位,換句話說,如果它等於零,則返回 32。
注意,此方法與基數為 2 的對數密切相關。對於所有的正 int 值 x:
floor(log2(x)) = 31 - numberOfLeadingZeros(x)
ceil(log2(x)) = 32 - numberOfLeadingZeros(x - 1)
返回:
返回在指定 int 值的二進制補碼表示形式中最高位(最左邊)的 1 位之前的零位的數量;否則,如果該值等於零,則返回 32。
具體還是不懂,求指點。謝謝。
這不是說的很清楚麼,返回一個數字的前導0,比如
對於1,它的二進制表示是0...01,前面是31個0,而對於2,它是0...010,前面是30個0。