算法第二週作業05

Description

輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。

Solutions

對於負數,通過其反碼中0的個數間接求取

對於正數,通過左向平移並判斷最低位是0是1來計數

太簡單,直接看代碼

Code

public int NumberOf1(int n) {
		if(n < 0){
            // int類型有32bit
            // 利用n的反碼中0的個數間接求取,負數n的反碼爲-n-1
            return 32 - NumberOf1(-n-1);
        } else {
            int result = 0;
            // 循環向左平移(或者除以2),直到平移結束
            while(n > 0){
                // 取最低位數值
                if(n%2 == 1){
                    // 計數1的個數
                    result++;
                }
                n = n>>1;
            }
            return result;
        }
    }


發佈了40 篇原創文章 · 獲贊 13 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章