En la programación de bajo nivel, es común trabajar a nivel de bits. Esto period cierto en los primeros días de la informática e incluso hoy en día es relevante. La mayoría de los lenguajes populares mantuvieron provisiones para operaciones a nivel de bits, no solo como un legado, sino también como una característica de uso frecuente en su arsenal. Las operaciones directas a nivel de bits tienen sus usos en criptografía, programación a nivel de sistema, procesamiento de imágenes, and so forth. Aquí, en este tutorial de programación de Golang, entraremos en los detalles de los operadores bit a bit y cómo trabajar con ellos en Go.
Leer: Los mejores cursos en línea para aprender Go y Golang
Operadores bit a bit de Golang
Go proporciona los siguientes operadores bit a bit:
- &: Bit a bit Y
- |: Bit a bit O
- ^: Bit a bit XOR
- &^: Poco claro (Y NO)
- <<: Shift izquierdo
- >>: Giro a la derecha
Los operadores bit a bit en Go manejan bit – 0 y 1 y trabajar solo en variables enteras que tengan patrones de bits de igual longitud. La cadena de formato %b se utiliza para la representación de bits. Aquí hay un ejemplo de código rápido que muestra cómo tomar la entrada del usuario y formatearla como un número binario en Go:
bundle important import "fmt" func important() { var i int fmt.Printf("Enter quantity:") fmt.Scanf("%d", &i) fmt.Printf("Quantity %d in binary is %b", i, i) }
Ejecutar este código en su entorno de desarrollo integrado (IDE) nos da el siguiente resultado:
Enter quantity:34 Quantity 34 in binary is 100010
Aquí hemos ingresado un número en una variable entera a través de fmt.Scanf y usó la cadena de formato %d para imprimir su forma binaria.
Uso de operaciones de nivel de bits en Go
A continuación, se muestran algunos casos de uso en los que un desarrollador podría usar operaciones de nivel de bits en Go:
- Dado que los operadores bit a bit trabajan en campos de bits, son particularmente eficientes para presentar algo que tiene “si” y “no” o “verdadero” o “falso” propiedades. Por ejemplo, si un programador quiere dar o revocar el permiso a un archivo (leer, escribe, ejecutar), en lugar de almacenar los bytes de información para el permiso, podemos usar solo tres bits como 101 = (solo lectura, ejecución) o 100 (solo lectura). Esto ahorra mucho espacio.
- En una transmisión de crimson o una comunicación a través de puertos/sockets que implican paridad y sumas de comprobación, que dependen en gran medida del funcionamiento de los bits
- Todos los algoritmos de encriptación y compresión funcionan a nivel de bit y utilizan en gran medida operadores bit a bit.
- Al trabajar con imágenes o en la programación de gráficos, las operaciones a nivel de bits ayudan mucho, en explicit el XOR operador tiene muchos usos interesantes en gráficos y procesamiento de imágenes
- La creación de puertas lógicas, el desarrollo de circuitos, los controladores de dispositivos, las máquinas de estados finitos y las matemáticas tienen numerosos usos para los operadores bit a bit.
El operador & (AND) en Go
Él & el operador en Go realiza Y operaciones entre dos números enteros proporcionados como un operando. bit a bit Y operación tiene las siguientes características:
Tenga en cuenta que el resultado es 1 solo cuando ambos X y y tiene valor, de lo contrario resulta en un 0 valor. Él Y La operación se puede utilizar para borrar o configurar 0 – ciertas posiciones de bit en un número. Esta thought se puede utilizar de numerosas formas creativas. Por ejemplo, si un programador quiere encontrar un número RARO o INCLUSOpueden usar el & operador de la siguiente manera:
x := 125 if (x & 0x1) > 0 { fmt.Println("ODD") } else { fmt.Println("EVEN") }
Este truco funciona porque cada RARO número tiene 1 como el bit menos significativo (LSB) y el Y la operación borrará todos los bits excepto el LSB. Como tal, el resultado de la si-condición estarán verdadero si el valor ANDed con 0x1 es mayor que 0lo que significa que el número es RARO y falso de lo contrario.
el | (O) Operador en Go
Él | el operador en Go realiza O operaciones entre dos números enteros proporcionados como un operando. bit a bit O operación tiene las siguientes características:
Tenga en cuenta que, en este caso, el resultado es 1 cuando al menos una entrada es 1y 0 de lo contrario. Esta propiedad se puede usar para establecer ciertos bits, a diferencia de Y, que se puede utilizar para borrar ciertos bits. Supongamos que queremos establecer el LSB de un número decimal 10 (en binario 1010). Después de configurar el LSB, el resultado debe ser 11 (en binario 1011). Aquí está el código para realizar esta tarea:
var set_bit uint32 = 0x1 var worth uint32 = 0xA fmt.Printf("%b", worth|set_bit)
Así que si & (Y) la operación se puede utilizar para claro pedacitos, | (O) se puede utilizar para entorno pedacitos
Leer: Comprender los operadores matemáticos en Go
El operador ^ (XOR) en Go
Él ^ el operador en Go realiza O operaciones entre dos números enteros proporcionados como un operando. bit a bit O operación tiene las siguientes características:
En este caso, la salida es 1 solo cuando ambos valores de entrada son diferentes. Si ambos valores de entrada son iguales, resultaría en 0 cuándo XOR rojo. Él XOR operador tiene muchos usos interesantes en informática. Se usa particularmente para alternar valores, como cambiar el valor 0 a 1 y 1 a 0 en una secuencia de bits. Un truco común con XOR es intercambiar valores de dos variables sin usar una tercera/otra variable. Aquí hay un ejemplo de código que muestra cómo ejecutar esta thought en Go:
x := 5 y := 6 fmt.Printf("nBefore swap: x=%d,y=%d", x, y) x = x ^ y y = x ^ y x = x ^ y fmt.Printf("nAfter swap x=%d,y=%d", x, y)
El código Golang anterior intercambia (o permuta) el valor almacenado en X a y y y a x usando el XOR operador.
El operador &^ (Y NO) en Go
Él &^ (Y NO) operador en Go es un poco interesante porque el operador actual es ^ y el &^ solo se usa para separarlo del XOR operador. La razón es que, a diferencia de C/C++, que tienen un unario dedicado NO operador representado por el signo de exclamación (!), Go no tiene bit a bit NO operador (que no debe confundirse con el ! No operador lógico). Por lo tanto, para negar cualquier cosa, los programadores pueden usar el mismo ^ (XOR) operador que actúa como bit a bit NO. bit a bit NO en realidad produce el complemento de uno de un número. Entonces, un poco dado X y ^x serían complementarios entre sí. Aquí hay un ejemplo de código easy que muestra cómo usar el &^ (Y NO) operador en Go:
var x uint8 = 129 fmt.Printf("n x=%b,^x=%b", x, ^x)
Los operadores << (desplazamiento a la izquierda) y >> (desplazamiento a la derecha) en Go
Él << desplazamiento a la izquierda y >> Los operadores de desplazamiento a la derecha en Go desplazan el número de posiciones de bit a la izquierda insertando 0 como el LSB, y hacia la derecha insertando 0 al MSB, respectivamente. Por ejemplo, un entero dado X se puede desplazar a la izquierda por norte bits o desplazado a la derecha por n bits de la siguiente manera:
x << n, shifts x to the left by n bits x >> n, shift x to the precise by n bits
Entre muchos de sus usos interesantes en la programación, si los programadores dejan cambiar un número por 1 bit, da como resultado el valor multiplicado por 2. De manera related, si desplazamos un número a la derecha por 1 bit, obtenemos un cociente del valor dividido por 2. Aquí hay un ejemplo de código rápido que ilustra la thought:
var x uint8 = 10 fmt.Printf("npercentd x 2 = %d", x, x<<1) fmt.Printf("npercentd / 2 = %d", x, x>>1)
Reflexiones finales sobre los operadores bit a bit en Go
A veces, los desarrolladores se confunden cuando vemos que se realizan operaciones similares con operadores lógicos y bit a bit. Para disipar tal confusión, los operadores bit a bit siempre producen valores de bits numéricos, mientras que los operadores lógicos producen solo dos valores, ya sea verdadero o falso, que no son numéricos. Esta easy distinción lo aclara todo. Las operaciones bit a bit tienen numerosos usos interesantes y complicados. A veces, una lógica larga se puede acortar y agilizar utilizando operadores bit a bit. Trabajar con operadores bit a bit en Go y Golang no solo tiene una sensación de bajo nivel, sino que también es muy divertido trabajar con ellos.
Lee mas Go y Golang tutoriales de programación y consejos de desarrollo de software program.