91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

黄骅市| 高台县| 襄垣县| 孟州市| 西青区| 屏东市| 永吉县| 九江市| 台湾省| 红河县| 顺昌县| 新河县| 化州市| 灵璧县| 旬邑县| 桐城市| 延安市| 哈尔滨市| 马关县| 顺平县| 蒙山县| 彰化市| 公安县| 泽库县| 赞皇县| 六安市| 红安县| 南宁市| 岑溪市| 汉寿县| 西平县| 虞城县| 瑞安市| 石林| 军事| 岳普湖县| 阿尔山市| 都兰县| 团风县| 固原市| 东乌珠穆沁旗|