中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

二進制中 1 的個數

發布時間:2020-06-20 20:55:43 來源:網絡 閱讀:299 作者:duanjiatao 欄目:編程語言

題目描述:請實現一個函數,輸入一個整數,輸出該數二進制表示中 1 的個數。

例如: 9 表示成二進制是 1001, 有 2 位是 1 。因此如果輸入 9 ,該函數輸出 2 。


先看一種錯誤的解法:二進制中 1 的個數

二進制中 1 的個數

int NumberOf1(int n)
{
    int count = 0;
    while(n)
    {
        if(n & 1)
            count ++;

        n = n >> 1;
    }

    return count;
}

注意:在使用乘法或者除法的運算時,盡量使用移位運算代替,因為移位運算的效率要比乘除法高很多!

上述解法的問題在于:輸入一個正數,結果沒有問題,但是,如果輸入一個負數的話,會發生什么情況?

我們知道,負數的二進制的最高位為 1 ,當進行右移操作時,最高位要補上符號位也就是 1 ,因此每右移一位,最高位就補 1 ,最終這個數字就會變成0xFFFFFFFF,而陷入死循環。

二進制中 1 的個數

常規解法

二進制中 1 的個數

二進制中 1 的個數

int NumberOf1_Solution1(int n)
{
    int count = 0;
    unsigned int flag = 1;
    while(flag)
    {
        if(n & flag)
            count ++;

        flag = flag << 1;
    }

    return count;
}

此解法中循環的次數等于整數二進制的位數,32位的整數需要循環32次。

高效的解法

二進制中 1 的個數

二進制中 1 的個數

int NumberOf1(int n)
{
    int count = 0;

    while (n)
    {
        ++ count;
        n = (n - 1) & n;
    }

    return count;
}

該解法在整數中有幾個 1 就只需要循環幾次。

相關題目二進制中 1 的個數

二進制中 1 的個數

二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數二進制中 1 的個數

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜城县| 壶关县| 长宁县| 黄浦区| 连江县| 绥芬河市| 隆子县| 尉氏县| 江源县| 琼中| 连江县| 日喀则市| 明星| 营山县| 武乡县| 林州市| 绿春县| 突泉县| 高密市| 呼图壁县| 宁海县| 福安市| 方城县| 云浮市| 会泽县| 馆陶县| 诸暨市| 运城市| 扎鲁特旗| 张家川| 绥化市| 东丰县| 汾西县| 华蓥市| 沅陵县| 乌拉特前旗| 柳河县| 龙里县| 湖口县| 马关县| 沧州市|