【Python】剑指offer 15:二进制中1的个数

    xiaoxiao2022-07-14  140

    位运算

    把数字用二进制表示之后,对每一位上0或者1的运算。 包含五种运算:与、或、异或、左移、右移。

    左移: 运算符:m << n,表示把 m 左移 n 位。 在左移 n 位的时候,最左边的 n 位被丢弃,右边不上 n 个0。 比如: 00001010 << 2 = 00101000 10001010 << 3 = 01010000右移: 运算符:m >> n,表示把 m 右移 n 位。 在右移 n 位的时候,最右边的 n 位被丢弃。但是如果数字是一个无符号数值,则用 0 填补最左边的 n 位;如果数字是一个有符号数值,则右移之后在最左边补 1. 比如: 00001010 >> 2 = 00000010(正数,左边补 0) 10001010 >> 3 = 11110001(负数,左边补 1)

    题目:二进制中 1 的个数。实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把9表示成二进制是 1001,有 2 位是 1。 思路: 如果把一个整数 n 减去 1,都是把最右边的 1变成 0.如果右边还有 0,则所有 0 变成 1,而它所有位不变。 接下来把 n 和 n-1 做与运算,相当于把最右边的 1 变成 0。 如: 1100 减去 1 = 1011 1100 & 1011 = 1000 二进制中有几个 1 ,就要进行几次运算。 代码:

    class Solution: def NumberOf1(self, n): count = 0 while n: count = count + 1 n = (n - 1) & n return count s = Solution() print(s.NumberOf1(9))
    最新回复(0)