Cálculo de un entero binario, contiene el número 1,

Q: calcular un número entero binario de 1 incluido

Consideración: El número de 1 binario se calcula, se examina en la aritmética binaria, los métodos de aplicación son:

  1. 1 proceso se moverá desde un mínimo en la parte superior, y los números enteros con (y, y) cuántas veces no es operación cero, durante el cual hay que muchos binario 1
  2. El número de ciclos, un número entero de ciclos n y (n-1), es binaria 1
  3. Uso función integrada de Java

A: código para:

 @Test
    public void main() {
        int n=-5;
        System.out.println(bitOneNumber(n));//31

        System.out.println(Integer.bitCount(n));//31

        System.out.println(bitOneNumberPro(n));//31
    }

    /**
     * 通过循环的 n&(n-1)运算,得到n二进制中所有1的个数
     * @param n
     * @return
     */
    private int bitOneNumberPro(int n) {
        int count=0;
        while (n!=0){
            count++;
            n=n&(n-1);
        }
        return count;
    }

    /**
     * 通过位移运算,与(只能使用&)运算,来判断二进制位是否为1
     * &(与):全真为真,相当于乘法    |(或):全假为假,相当于加法   ^(异或):同为0,异为1
     * @param n
     * @return
     */
    private int bitOneNumber(int n) {
        int count = 0;
        int bit = 1;//用于去检测n的各个二进制位上的1
        while (bit!=0){//当bit的最高1位被左移后,bit==0
            if((bit&n)!=0){
                count++;
            }
            bit=bit<<1;//将bit二进制中的1,不断的向左移动
        }
        return count;
    }

Bit de computación relacionados

Y (Y, y): toda la verdad es cierto, el equivalente a la multiplicación

| (O, o): falsa completa es falsa, el equivalente a una adición

^ (Exclusivo o, xor): con 0, 1 iso

<< >>: a la izquierda, el operador de desplazamiento a la derecha, núm << 1, equivalente a num se multiplican, se divide por 2

<<<, >>>: sin firmar izquierda, derecha, ignorar el bit de signo, las vacantes se llenan de 0

Publicados 104 artículos originales · ganado elogios 54 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/BigBug_500/article/details/104779122
Recomendado
Clasificación