亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

二進制中 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

兴和县| 邹城市| 鞍山市| 双桥区| 沿河| 抚远县| 万山特区| 黔西县| 南昌县| 射阳县| 明光市| 沙雅县| 雷州市| 吉林市| 深水埗区| 涪陵区| 平阳县| 马关县| 柘荣县| 土默特左旗| 南乐县| 甘洛县| 通化县| 康平县| 建瓯市| 福鼎市| 济阳县| 新巴尔虎右旗| 奉节县| 富源县| 宜君县| 曲阳县| 策勒县| 峨山| 巫溪县| 浏阳市| 常德市| 垣曲县| 南开区| 普兰县| 资溪县|