剑指offer:二进制中1的个数

    xiaoxiao2021-03-25  94

    题目描述

    输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

    容易出错的解法:(输入负数向右移位的话左边会补1)

    class Solution { public: int NumberOf1(int n) { unsigned int ln = (unsigned int)n; int num = 0; while(ln > 0) { num += n&1; ln = ln >> 1; } return num; } };

    正确解法:

    class Solution { public: int NumberOf1(int n) { int count = 0; while(n) { //把n中最右边的1变成0 n = n & (n-1); count++; } return count; } };

    转载请注明原文地址: https://ju.6miu.com/read-22737.html

    最新回复(0)