Los operadores bit a bit convierten números a formato binario y luego realizan cálculos.
Por ejemplo: a = 60, b = 13,
a & b = 12, esto se debe a que a y b se convierten a binario como
a = 0011 1100,
segundo = 0000 1101,
a y b = 0000 1100 = 12,
Los operadores de bits incluyen los siguientes:
Operadores de bits | significado | Ejemplo: a = 60 = 0011 1100, segundo = 13 = 0000 1101 |
---|---|---|
& | Y: Dos valores participan en la operación, si ambos bits correspondientes son 1, el resultado del bit es 1, de lo contrario es 0 | a y b = 0000 1100 = 12 |
| | O: Dos valores participando en la operación, si uno de los dos bits correspondientes es 1, el resultado de ese bit es 1, en caso contrario es 0. | un | segundo = 0011 1101 = 61 |
^ | XOR: Dos valores participan en la operación, si los dos bits correspondientes son inconsistentes, el resultado del bit es 1, de lo contrario es 0 | a^b = 0011 0001 = 49 |
~ | Negación: niega cada bit del valor involucrado en la operación, es decir, 1 se convierte en 0, 0 se convierte en 1, ~x es equivalente a -x-1 | ~a = 1100 0011 = -61, el complemento del bit con signo (la representación binaria de números negativos se explicará más adelante) |
<< | Desplazamiento a la izquierda: Desplaza cada bit del valor que participa en la operación hacia la izquierda un número de bits. El número a la derecha de "<<" especifica el número de bits a mover. Los bits altos se descartan y los bits bajos se lleno de 0. | un << 2 = 1111 0000 = 240 |
>> | Desplazamiento a la derecha: Desplaza cada bit del valor que participa en la operación hacia la derecha un número de bits. El número a la derecha de "<<" especifica el número de bits a mover. Los bits bajos se descartan y los bits altos se lleno de 0. | a >> 2 = 0000 1111 = 15 |
Ahora que comprende el significado de los operadores bit a bit, comencemos con los ejercicios.
Ejemplo 1: ingrese dos cadenas binarias no vacías, que contengan solo 0 y 1, y devuelva la suma de los dos números (1. Exprese el resultado en binario; 2. Todos los valores de entrada no son '0' excepto ' 0'.binario inicial)
Análisis: Podemos diseñar un algoritmo de este tipo para calcular:
Convierta a y b en números enteros cy d. En el siguiente proceso, c almacena el resultado y d almacena el bit de acarreo.
Cuando el bit de acarreo no es 0:
1. Calcule el resultado de la suma sin acarreo de las corrientes cyd: resultado = c ^ d;
2. Calcule el acarreo de corriente cyd: jin = (c & d) << 1;
3. Complete este ciclo y actualice c = resultado, d = jin;
Cuando el bit de acarreo es 0, se devuelve la forma binaria de c;
¿Por qué es factible este método? En la primera ronda de cálculo, el último dígito del resultado es el resultado después de la suma de c y d, y el penúltimo dígito de jin es el resultado de la suma de los últimos dígitos de c y d. En cada ronda posterior, dado que jin se obtiene mediante "Y bit a bit" y "desplazamiento a la izquierda" de cyd, se agregarán ceros al final, por lo que los siguientes dígitos no se verán afectados en el siguiente proceso de cálculo, y en cada ronda usted Puede obtener una respuesta con el bit i bajo y su acarreo al bit i+1 bajo, lo que también simula el proceso de suma.
El código se muestra a continuación:
def addBinary(self, a: str, b: str) -> str:
c = int(a, 2)
d = int(b, 2)
while d:
result = c ^ d
jin = (c & d) << 1
c = result
d = jin
return bin(c)[2:] # bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
Lo anterior es una breve introducción a los operadores de bits. Más adelante registraré la representación de los números binarios negativos y cómo comprenderlos mejor. Gracias.
Indique la fuente al reimprimir, ¡muchas gracias!