程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 方法-將int轉binary代碼中有個numberOfLeadingZeros 求具體解釋下

方法-將int轉binary代碼中有個numberOfLeadingZeros 求具體解釋下

編輯:編程綜合問答
將int轉binary代碼中有個numberOfLeadingZeros 求具體解釋下
 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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved