2進数をビット単位-011- 1

記事のディレクトリ

タイトル説明

進数1での出力の数を示す整数。ここで、負の数は補数を示します。

分析

  • Aソリューション:独自の言語の特殊な性質のために、整数のpythonのバイナリ表現は、負の数のバイナリ表現はかなり特殊です。
>>> bin(5)
'0b101'
>>> bin(-5)
'-0b101'
>>> bin(-5 & 1)
'0b1'
>>> bin(-5 & 3)
'0b11'
>>> bin(-5 & 7)
'0b11'
>>> bin(-5 & 15)
'0b1011'
>>> 1<<80
1208925819614629174706176

Pythonはバイナリ表現の負ことが分かる结合符号上記のようによれば、前記ビット操作のためしかしときに負の数大数的二进制位数负数进行补码表示動作します。

最終的に测试代码、それは、Pythonを見ることができます大数没有溢出

  • 溶液II:この結論によるとが見つかりました:のために得られた値nは1の数のバイナリ表現、あなたは多くの時間を変更することができます。次のようにコードは、時間の複雑さの最適化されています数值nn - 1后再和n相与相当于将n从右边数的第一个1变成0O(n中1的个数)

しかし、Python言語の特殊性は、補体オーバーフローは、Cプログラミング言語を使用するので、負ではない表します。

コード

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        # write code here
        return bin(((1 << 32) - 1) & n).count('1')
class Solution {
public:
     int  NumberOf1(int n) {
         int count = 0;
         while (n!=0){
             count += 1;
             n = n & (n-1);
         }
         return count;
     }
};
公開された219元の記事 ウォン称賛85 ビュー14万+

おすすめ

転載: blog.csdn.net/z_feng12489/article/details/103352404