Likou 191. El número de bit 1 (operación de bit)

191. Número de bit 1

Escriba una función, la entrada es un entero sin signo (en forma de cadena binaria) y devuelve el número de dígitos en la expresión binaria cuyos dígitos son '1' (también conocido como peso de Hamming).

inmediato:

Tenga en cuenta que en algunos lenguajes (como Java), no hay ningún tipo de entero sin signo. En este caso, tanto la entrada como la salida se designarán como tipos de enteros con signo y no deberían afectar su implementación, porque la representación binaria interna es la misma independientemente de si el entero tiene o no signo.
En Java, el compilador usa la notación de complemento a dos para representar enteros con signo. Por lo tanto, en el ejemplo 3 anterior, la entrada representa un entero con signo -3.

示例 1:

输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
示例 2:

输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
示例 3:

输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。
 

提示:

输入必须是长度为 32 的 二进制串 。

respuesta:

De acuerdo con la definición de decimal binario, solo necesitamos dividir continuamente un número decimal por 2, y cada vez obtendremos un resto 0 o 1, y luego hasta que el número decimal sea 0, ordenar todos los restos de atrás hacia adelante. esta vez El resultado es un número binario.
Y lo que queremos es el número 1, por lo que solo necesitamos sumar el resto cada vez para obtener el número 1. Esto se debe a que el resto es 0 no afecta el cálculo de 1.

Código:

int hammingWeight(uint32_t n) {
    
    
    int m = 0;
    while(n)
    {
    
    
        m += n%2;
        n/=2;//也可以由位运算写成n=n>>1
    }
    return m;
}

Método dos: operación de bits

Podemos utilizar directamente operaciones de bits para los cálculos.
Basado en el concepto de AND bit a bit, podemos realizar AND bit a bit para n a 1. De esta manera, si el último bit de n es 1, el resultado también será 1, y se encontrará cuando el último bit de n sea 1. n es 0 No obtendrá 1. Luego, divida n por 2 cada vez, es decir, mueva 1 bit a la derecha.
Es decir, se juzga directamente si el bit más bajo del binario es 1 cada vez.

//直接判断二进制最低位的数是不是1
int hammingWeight(uint32_t n) {
    
    
    int m = 0;
    while(n)
    {
    
    
        m+=n&1;
        n>>1;
    }
    return m;
}

Supongo que te gusta

Origin blog.csdn.net/xiangguang_fight/article/details/115108271
Recomendado
Clasificación